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