1

以下のプログラムに問題があります。特定の単語について、ユーザーが入力した文字列コマンドをスキャンしようとしています。現在の私の主な問題は、次を実行すると、「strcat の引数 2 を渡すと、キャストなしで整数からポインターが作成される」という警告が表示されることです。私の意図は、文字列「s」の最初の 3 文字をループし、それらを文字列「firstthree」に連結し、後で文字列「firstthree」の値をチェックすることです。どんな助けでも大歓迎です。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <readline/readline.h>
#include <readline/history.h>

/* Simple example of using gnu readline to get lines of input from a user.
Needs to be linked with -lreadline -lcurses
add_history tells the readline library to add the line to it's
internal histiry, so that using up-arrow (or ^p) will allows the user
to see/edit previous lines.
*/

int main(int argc, char **argv) {
    char *s;
    while (s=readline("Enter Name: ")) {
            add_history(s); /* adds the line to the readline history buffer */
            printf("Hello %s\n",s);/*output message to the user*/
            char *firstthree;
            int i;
            for(i = 0; i < 3; i++){
                    strcat(firstthree, s[i]);
                    printf("Hello %s\n",firstthree);//checking to see the character added to the end of the string
            }
            printf("Hey %s\n",firstthree);/*prints out the first three characters*/
            free(s); /* clean up! */
            free(firstthree);
    }
    return(0);
}
4

2 に答える 2

6

あなたのプログラムには多くの問題があります。firstthreeたとえば、を初期化することはありません。

表示されている特定のエラーが発生する理由は、次の呼び出しによるものです。

strcat(firstthree, s[i]);

sは でありchar *、 も同様s[i]ですが、両方のパラメーターが null で終わる文字列へのポインターであることcharstrcat期待されます。あなたが望んでいるように見えるのは次のようなものです:

char firstthree[4] = { 0 };
for (int i = 0; i < 3; i++)
{
    firstthree[i] = s[i];
    printf("Hello %s\n", firstthree);
}
于 2013-10-10T22:58:15.557 に答える
0

これを行うために strcat() を使用することはできません。char* と char ではなく、引数として 2 つの char* が必要です。プラットフォームで利用可能な場合は、 strncat() を使用できます。

于 2013-10-10T22:59:37.927 に答える