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



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

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

我如何将每个短语打印在单独的一行上,以便在一行上打印"努力工作",然后在另一行打印"努力玩耍",再在另一行将"享受"等等。我如何将每一个短语与数字关联起来?如有任何帮助/建议,我们将不胜感激!

这是我的代码:

#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("nn");
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"};

正如评论中所指出的,"努力工作"one_answers"努力玩耍"中的前导和尾随空格分别是问题的原因。

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

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

这导致了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]

您可以去掉前导和尾随whitspace,也可以增大数组。如果要输出与数组关联的Number,只需将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("nn");
system("PAUSE");
return 0;
}
  • 第一个解决方案:

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

  • 第二个解决方案:

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

  • 相反,

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

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

相关内容

  • 没有找到相关文章

最新更新