14
#include <stdio.h>
int main(void)
{
    int i,j,k;
    char st;
    printf("enter string\n");
    scanf("%s", st);
    printf("the entered string is %s\n", st);
}

Compiling above program gives me a warning:

warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]
palindrom.c:8:1: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]

What am I doing wrong here?

This is what happens when I run it:

$ ./a.out
enter string
kiaaa
the entered string is (null)

Edit:

Here is another version of the code (made char st; into char *st):

#include <stdio.h>
int main(void)
{
    int i,j,k;
    char *st;
    printf("enter string\n");
    scanf("%s", st);
    printf("the entered string is %s\n", st);
}

However, it behaves the same on runtime.

4

7 に答える 7

11

char stは一文字です。コードの残りの部分から判断すると、文字の配列を宣言するつもりだった可能性があります。

char st[80];
于 2012-05-24T06:08:28.093 に答える
1

scanfchar*文字列をスキャンしていることを示すポインタが必要です。

スタックに割り当てられた文字を提供しています。

a を使用するgetchar()st、char 配列を作成します。

于 2012-05-24T06:13:05.427 に答える
1

タイプの不一致があります。
scanfはタイプ セーフではありません。適切なタイプを指定する必要があります。scanf入力からデータを取得できるようにするため、読み取るデータのタイプを指定する必要があります。%s文字変数を 指定して文字列を読み取るように指定します。

配列が必要です:

#define MAX_LENGTH 256
char st[MAX_LENGTH];

@Jerryが正しく指摘しているように、使用する代わりに
getline()を使用することで、すべての面倒を簡単に回避できます。scanf

于 2012-05-24T06:08:27.363 に答える
0

st は char の型 &st は char の型 * 違いに注意してください。ところで、文字列を格納するために使用できる文字は 1 つだけです。char[] 配列を使用します。

于 2012-05-24T06:11:37.627 に答える
0

char st は文字です。つまり、1 つの文字のみを保存します。このように試してみてください。 main() char st [100]; scanf("%s",st); これらの 3 行を変更するだけで機能します。ただし、関数を int として宣言した int main() として保持します。 main() で動作します

于 2012-05-24T07:57:30.147 に答える
0

char *st;またはのような配列を使用しchar st[50];ます。

char ポインターの使用が完了したら、ポインターによって使用されているメモリの割り当てを解除する必要があります。これは、関数を使用して実行できますfree(st);

編集:文字列を印刷していて、ポインターを使用している場合は、次のことができます:

printf("the entered string is %s\n",st);
printf("the entered string is %s\n",*st); // This will work in both cases, if you use char *st or char st[50]
于 2012-05-24T06:09:04.233 に答える
0

他の人が述べたように、配列を作成したい:

または任意のサイズの配列に変更char st;char st[10];ます。

上記の変更によりst、単一の char 値を保持できる 10 個の個別の要素を持つ配列になります。

于 2012-05-24T06:21:32.583 に答える