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

时间:2015-09-24 06:48:08

标签: c arrays multidimensional-array spaces c-strings

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

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

如何在单独的一行打印出每个短语,以便"努力工作"打印出一行然后" Play Hard"在另一条线上,然后"享受"在另一个等等。另外如何将每个短语与一个数字相关联?任何帮助\建议将不胜感激!

这是我的代码:

#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 . . .

5 个答案:

答案 0 :(得分:3)

您的printf电话很好。真正的问题是你正在溢出缓冲区。每个字符串最多存储10个字节。但是在C字符串中,根据定义NUL终止。因此,您需要一个额外的字节来存储NUL

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

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

答案 1 :(得分:3)

正如评论中指出的那样,“努力工作”和“努力工作”中的前导和尾随空格分别是发行的原因。

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

" '[space]' 'W' 'o' 'r' 'k' '[space]' 'h' 'a' 'r' 'd' '\0'"

导致11个字符。

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

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

你可以摆脱你的前导和尾随空格或者让你的阵列更大。如果要输出与数组关联的数字,只需将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;
}

答案 4 :(得分:0)

  • 第一个解决方案:

  • 只需从数组的第一个和第二个字符串中删除空格。因为它超出了araay字符串长度。

  • 第二个解决方案:

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

  • 而不是这个,

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

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