如何在 C 中打印二维字符串数组(带空格)?

How to print a two dimensional array of strings(with spaces) in C?

我正在尝试使用下面显示的数组打印出二维字符串数组,并将每个短语与 0 到 3 之间的数字相关联。当我尝试打印出每个短语时,单词会匹配在一起并打印出来不正确。

char PhraseList[4][10]= {" Work Hard","Play Hard ","Enjoy","Live"};

我怎样才能在单独的一行上打印出每个短语,以便在一行上打印出“努力工作”,然后在另一行上打印出 "Play Hard ",然后在另一行上打印出 "Enjoy",等等。另外如何才能我将每个短语与一个数字相关联?任何 help\suggestions 将不胜感激!

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <math.h>



int main()
{
char PhraseList[4][10]= {" Work Hard","Play Hard ","Enjoy","Live"};

int i;

for(i=0; i<4; i++)
{
    printf("%s \n", PhraseList[i]);
}


printf("\n\n");
system("PAUSE");
return 0;
}

输出:

 Work HardPlay Hard Enjoy
Play Hard Enjoy
Enjoy
Live


Press any key to continue . . .

您的 printf 通话没有问题。真正的问题是你溢出了缓冲区。每个字符串都有 10 个字节的最大存储空间。但在 C 中,字符串根据定义 NUL 终止。所以你需要一个额外的字节来存储 NUL.

最好不要指定固定大小。可以这样做:

const char *PhraseList[]= {" Work Hard","Play Hard ","Enjoy","Live"};

正如评论中指出的,“努力工作”中的前导和尾随 space 和 "Play Hard " 分别是问题的原因。

每一个的大小是 11 个字符(不是 10 个)。

" '[space]' 'W' 'o' 'r' 'k' '[space]' 'h' 'a' 'r' 'd' '[=10=]'"

结果为 11 个字符。

因此增加 PhraseList 的大小并将其声明为

char PhraseList[4][11]= {" Work Hard","Play Hard ","Enjoy","Live"};

const char *PhraseList[]= {" Work Hard","Play Hard ","Enjoy","Live"};

您为字符串分配的内存太少。

让我们看看“努力工作”。在内存中,此字符串存储为 ' '、'W'、'o'、'r'、'k'、' '、'H'、'a'、'r', 'd', '\0', 即在里面需要11个字节.

但是你只分配了10个字节。将类型更改为 PhraseList[4][11].

您可以去掉前导和尾随空格,或者让数组更大。如果你想输出与数组关联的数字,只需将 i 变量添加到你的输出中。

int main()
{
char PhraseList[4][10] = { "Work Hard","Play Hard","Enjoy","Live" };

int i;

for (i = 0; i<4; i++)
{
    printf("%d %s \n", i, PhraseList[i]);
}

printf("\n\n");
system("PAUSE");
return 0;
}
  • 第一个解法:

  • 只需从数组的第一个和第二个 string.Because 中删除 space 它超出了 araay 字符串长度。

  • 第二种解法:

  • 只需增加数组的字符串大小,

  • 而不是这个,

    char PhraseList[4][10] = { " Work Hard","Play Hard ","Enjoy","Live" };
    
  • 这样声明,

    char PhraseList[4][15] = { " Work Hard","Play Hard ","Enjoy","Live" };