0
#include<stdio.h>
int main()
{
char str[3][10]={
                    "vipul",
                    "ss",
                    "shreya"
};

これが機能しない理由:

printf("%s",str[1][0]);

アクセスしたいstr場合

printf("%s",&str[1][0]);

またはこれはそれを完全に行うでしょう

printf("%s",str[1]);

誰でも説明できますか?最初のコードでエラーが発生するのはなぜですか

prog.c: In function ‘main’:
prog.c:9:5: error: format ‘%s’ expects argument of type ‘char *’, but 
                   argument 2 has type ‘int’ [-   Werror=format]
cc1: all warnings being treated as errors

引数の型が であるのはなぜintですか?

4

5 に答える 5

0

あなたの回線エラーで:

 printf("%s",str[1][0]);

文字 (printf の "%c") を含む文字列を出力しようとしています。

したがって、2D 配列の 1 つだけを印刷するには、次のようにする必要があります。

  int main()
  {
  int i;
  char str[3][10]=
  {
  "vipul",
  "ss",
  "shreya"
  };
  i = 0;
  while(str[0][i] != '\0')
  {
  printf("%c",str[0][i]);
  i++;
  }
  }

これはかなり醜いです^^

代わりに、すべての ur 2D 配列を 3 回の反復で印刷できます。

 int main()
 {
 int i;
 char str[3][10]=
 {
 "vipul",
 "ss",
 "shreya"
 };
 i = 0;
 while(i < 3)
 {
 printf("%s\n",str[i]);
 i++;
 }
 }
于 2013-07-15T07:33:32.690 に答える
0

最初のケースprintf("%s",str1[1][0]);では、使用するprintf関数とフォーマット指定子に単一の文字を渡しています%s。printf関数の場合%s、文字ではなく文字列を想定しているため、エラーが発生します。
指定している最初のprintf関数と同様に、%s文字を渡しているため、引数の昇格が行われ、charに昇格されintます。

•The default argument promotions are char and short to int/unsigned int and float to double
•The optional arguments to variadic functions (like printf) are subject to the default argument promotions

デフォルト引数の昇格の詳細については、こちらを参照してください。

于 2013-07-15T07:16:28.073 に答える