C将char数组初始化为字符串但在尝试printf时为空

Pur*_*ice 0 c

我想打印字符数组(作为字符串),但它在运行时显示一个空字符串

初始化:

    char str1[6]= "Black";
    char str2[7]= "Yellow";
Run Code Online (Sandbox Code Playgroud)

printf 语句:

    printf ("%s = %d Bath\n",str1,a);
    printf ("%s = %d Bath\n",str2,a);
Run Code Online (Sandbox Code Playgroud)

预期的:

Black = 150 Bath
Yellow = 150 Bath
Run Code Online (Sandbox Code Playgroud)

输出

Black = 150 Bath
  = 150 Bath
Run Code Online (Sandbox Code Playgroud)

我尝试在没有大小数字的情况下进行初始化,例如char str2[]= "Yellow"; 或使用 C++ cout 来显示

原始代码:

    char str1[6]= "Black";
    char str2[7]= "Yellow";
Run Code Online (Sandbox Code Playgroud)

438*_*427 5

char size ,E= 'E' , S= 'S' , M= 'M', L = 'L';

...

scanf ("%s",&size);
Run Code Online (Sandbox Code Playgroud)

您告诉系统将字符串(由于%s)扫描为单个字符(即size)。

这是未定义的行为

使用%c的字符。

顺便提一句:

使用时,scanf您应该始终检查返回值是否等于您希望扫描的元素数。

所以而不是:

scanf("%d",&requiredamount);
Run Code Online (Sandbox Code Playgroud)

你应该做:

if (scanf("%d",&requiredamount) != 1)
{
   // Could not scan integer - add error handling
}
Run Code Online (Sandbox Code Playgroud)