2011-12-29 14 views
0

我試圖創建在C.這裏的字符串的一個陣列是代碼:在C中創建一個字符串數組失敗了,爲什麼?

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
#include <stdlib.h> 

int main() 
{ 
    char *foo[100]; 
    strcpy(foo[0], "Testing this"); 
    printf("%s ", foo[0]); 

    return 1; 
} 

但是,當我編譯它,它只是打破。沒有錯誤,沒有任何東西,它只是不工作和休息。任何建議?當我三的char * foo的[10]它的工作原理,但我不能只用10串

回答

4

工作,你分配一個指針數組,但沒有分配任何內存爲他們指向。您需要致電malloc從堆中分配內存。

char *foo[100]; 
foo[0] = malloc(13); 
strcpy(foo[0], "Testing this"); 

當然,你需要在以後的日期free內存當你完成它。

你的代碼調用了被稱爲undefined behavior。基本上可以發生任何事情,包括代碼按照你的意圖工作。如果char *foo[10]的版本按照您的預期工作,那簡直是運氣不佳。

順便說一句,你main()定義是錯誤的。它應該是int main(void)

+0

還有一件事,你知道爲什麼這個失敗嗎? – FinalDestiny 2011-12-29 23:58:33

+0

好的,謝謝:) – FinalDestiny 2011-12-30 00:04:31

1

你分配一個未分配的指針。 char * foo [100]是一個包含100個未分配指針的數組,它們指向內存中未知的位置,可能無法訪問的位置。

0

擴大在別人的答案:

char *foo; 

是一個指向一個字符。它可以被分配單個字符的地址或者分配由'\ 0'結尾的字符序列中的第一個的地址。它也可以通過malloc()分配一個地址。

char foo[100]; 

是100個字符或空格的空間,用於最多99個字符和終止'\ 0'字符的字符串。

char *foo[100]; 

是100個字符指針,即100個char *foo;類型。

1

要創建100個指針指向任何地方。正如David所解釋的那樣,您需要動態分配內存。你不過,你也可以讓編譯器做到這一點,如果你知道的字符串(或最大)的大小:

// Create an array of 10 strings of size 100 and initialize them automatically 
char foo[10][100] = {0}; 

// Now you can use it them and not worry about memory leaks 
strcpy(foo[0], "text"); 

// Or use the safer version 
strcpy_s(foo[0], 100, "text"); 
0
#include <stdlib.h> 
#include <stdio.h> 

int main(void){ 
    char *foo[100]; 
    foo[0] = malloc(13*(sizeof(char))); 
    strcpy(foo[0], "Testing this"); 
    printf("%s ", foo[0]); 

    return 0; 
} 

這是你的代碼的修正版本。

MISTAKE: not allocating enough memory for the string. 

CORRECTION: using malloc to allocate 13 blocks of memory for the string. 
相關問題