簡體   English   中英

如何在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"};

如何在單獨的行上打印每個短語,以便“努力工作”在一行上打印,然后在“演奏努力”在另一行上打印,然后在另一行“享受”,依此類推。另外,如何將每個短語與數字相關聯? 任何幫助\\建議將不勝感激!

這是我的代碼:

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

正如評論中指出的那樣,“努力工作”和“認真努力”中的前導和尾隨空格是問題的原因。

這些字符的大小均為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"};

您為字符串分配的內存太少。

讓我們來看看“努力工作”。 在內存中,此字符串存儲為“”,“ W”,“ o”,“ r”,“ k”,“”,“ H”,“ a”,“ r”,“ d”,“ \\ 0”,它需要11個字節。

但是您只能分配10個字節。 將類型更改為PhraseList[4][11]

您可以擺脫領先和落后的惠特空間,也可以擴大規模。 如果要輸出與數組關聯的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("\n\n");
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" }; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM