2016-05-06 82 views
-2

我有一個char一個問題*陣列中C(GCC Linux)的填充字符*陣列從0到x

在Debian它的工作原理,但對另一系統(yocto,raspbian)來分割故障

工作守則的Debian:

char *myarray; 
for (i=0;i<999;i++){ 
printf(myarray, "%i", i); 
//do something with string to compare in file 
} 

但在另一個系統本準則的錯,我試圖使一個數組:

char *myarray[999]={"0","1","2"}; 
for (i=0;i<999;i++){ 
    //do something with string[i] to compare in file 
} 

這個代碼也可以,但我不喜歡從手工填充陣列「999」

我還沒有找到一種方法,使從「0」 char *string[arr] - 在一個循環「999」

+3

如果你的第一個代碼在Debian中工作,那純粹是偶然的。你爲某事分配一個指針,但從不初始化它;那麼你可以訪問它的內容。而且,'printf'這行的語法真的很奇怪。你確定這是你的「工作代碼」嗎? – usr2564301

+0

@RadLexus正如下面的ameyCU指出的那樣,他的意思是(或者應該是)sprintf()。但是,整個事情都是愚蠢的。 –

+0

該問題被用作「停止!在重新打開隊列中查看和收聽。我恭敬地不同意。一個人應該能夠向窮人發佈一個顯示良好代碼的答案。 – manuell

回答

1

好,你可以使用sprintf -

char *array[1000]; 
for(int i=0;i<1000;i++){ 
    array[i]=malloc(10*sizeof(**array)); //allocate memory to pointer 
    if(array[i]!=NULL){      //check return of malloc 
     sprintf(array[i],"%d",i);    
    } 
} 

- 只記得free分配的內存。

+1

malloc()arg從哪裏來?看起來像malloc(4)將處理「999」(加上終止'\ 0')。 –

+0

@JohnForkosh只需分配更多的內存。它等於'10'字節。 – ameyCU

+0

'sizeof(** array)'是'sizeof(char)'是'1'是不必要的混淆。 – DevSolar

1

這很不清楚你在追求什麼。

如果你想建立一個陣列,通過「999」持有字符串「0」,則可以使用snprintf()做到這一點:

char array[1000][4]; /* Wastes some space, but not a great deal. */ 
for(int i = 0; i < 1000; ++i) 
    snprintf(array[i], sizeof array[i], "%d", i); 

,那麼你可以打印例如452像這樣:

printf("452 is %s\n", array[452]);