我正试图使用下面显示的数组打印出一个二维字符串数组,并将每个短语与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" };