2015-09-24 42 views
0

我试图用下面显示的数组打印出一个字符串的二维数组,并将每个短语与从0到3的一个数字相关联。当我尝试打印出每个短语时,这些单词匹配在一起并且不正确地打印出来。如何在C中打印字符串(带空格)的二维数组?

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("\n\n"); 
system("PAUSE"); 
return 0; 
} 

输出:

Work HardPlay Hard Enjoy 
Play Hard Enjoy 
Enjoy 
Live 


Press any key to continue . . . 

+1

为什么在第一个和第二个字符串条目中有前导和尾随空格?这是故意的吗?如果是,则需要增加数组第二维的大小。 – CinCout

+1

题外话:如果你真的想使用'system(“pause”)'那么为什么不使用'system(“echo Work Hard”)'(等等)呢? – usr2564301

回答

3

printf电话都很好。真正的问题是你正在溢出缓冲区。每个字符串已被赋予10个字节的最大存储空间但在C字符串中定义为NUL终止。所以你需要一个额外的字节来存储NUL

最好不要指定一个固定的大小。能不能做到这一点:

const char *PhraseList[]= {" Work Hard","Play Hard ","Enjoy","Live"}; 
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"}; 
0

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

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

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

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; 
} 
0
  • 首个解决方案:

  • 只是删除从数组的第一个和第二string.Because它exceded的araay字符串长度的空间。

  • 二解决方案:

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

  • 取而代之的是,

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

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

为什么15? *仅仅因为SO评论最小长度是15个字符*? :P – CinCout

+0

我建议15根据这code.It取决于你的要求或长度的字符串。 –

+0

这段代码究竟需要15个?不会11吗? – CinCout