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