2013-09-28 72 views
1

這會產生不正確的輸出。增量指針來枚舉的char []

有人能告訴我什麼,我做錯了。顯示前1,2或3個字符(取決於字符),其餘是隨機的。

注意這只是一個學習練習&我知道有更簡單的方法來做到這一點。

int main(int argc, char *argv[]) 
{ 
    //Assume 1 arg only 
    int len = strlen(argv[1]); 
    char *d = malloc (strlen(argv[1])+1); 
    strcpy(d,argv[1]); 

    char *x; 
    x = &d[0]; 

    int j,k; 
    j = sizeof(char*); 
    for (k=0;k<len;k++){ 
    printf("Value: %c\n\n", (*x + (k*j))); 
} 
+0

你想做什麼? – Rohan

+0

'的sizeof(字符*)'是一個指針的大小,你需要的是一個'char','的sizeof(char)的' – pNre

+1

@pNre哪個反正沒用,大小自'的sizeof(char)的'有保證以標準爲'1'。當然 –

回答

2

你應該使用sizeof(char)這等於1;試試這個:

j = sizeof(char); 
for (k = 0; k < len; k++) { 
    printf("Value: %c\n\n", *(x + k * j)); // j equals to 1 
} 

注:*(a + b)等於a[b]b[a]

+0

需要注意的是'的sizeof(char)的'保證是1,因此你不需要使用'j'所有 – simonc

+0

@simonc正如他所說,這是一個**學習鍛鍊**不是一個真正的程序 –

+1

@ABFORCE所以@simonc註釋因爲這是一個新手應該很快學會的東西(否則他的真實代碼可能會被sizeof(char)'拋棄)。 –

1

有字符串中的字符之間不sizeof(char*)字節。您還取消了字符串中的第一個字符,然後向其中添加j*k。您應該將循環改爲

for (k=0;k<len;k++){ 
    printf("Value: %c\n\n", *(x + k)); 
} 
1

或者,你可以簡單地使用指針運算來做到這一點:

int len = strlen(argv[1]); 
char *d = (char*)malloc (len+1); 
strcpy(d,argv[1]); 

char*p=d; 
while(*p) 
     printf("Value: %c\n\n", *p++); 
free(d); 

你還忘了釋放被分配的內存malloc。您最後需要撥打free

+0

可以這樣做嗎? 'if(* p ++ =='a')'@Zoltan – ojhawkins

+0

是的,你可以。它會比較p指向的字節值和'a'的字節值,然後遞增p指向字符串中的下一個字符。while循環將停止在終止的'\ 0'(空)字符處並按照預期退出。 – Zoltan