2012-01-19 23 views
2

我只是在C中學習一些指針的東西,我碰巧知道使用*可以對指針進行取消引用。所以我寫了下面的代碼來檢查。給定的代碼有什麼問題

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

char *findChar(char *s, char c){ 
    while(*s!=c){ 
    s++; 
    } 
    return s; 
} 

int main(){ 
    char myChar='a'; 
    const char myString[]="Hello abhishek"; 
    char *location; 
    location = findChar(myString,myChar); 
    puts(location); 
    char temp = *location; 
    printf(temp); 
} 

我假設temp應該得到字符指針位置指向的值,但是這個程序給了我一個段錯誤。請澄清我做錯了什麼?

+0

如果你的字符串中沒有'a',你的findchar函數將跳出界限。另外,請考慮使用調試器來查找aix提到的故障。 –

回答

7

以下是不正確的:

char temp = *location; 
printf(temp); 

如果你想打印出來的字符,請使用以下:

char temp = *location; 
printf("%c\n", temp); 

的第一個參數printf()應該是格式字符串。

+0

是的..那工作..: - /但你可以請幫助我與GDB的事情.. – Abhishek

+0

這是一個很好的GDB教程:http://www.cs.cmu.edu/~gilpin/tutorial/ – prelic

0

printf的第一個參數應該是char*(對於格式),而不是char

嘗試printf("%c\n",temp);

順便說一句,看到myChar索引數組中,你可能要打印location-myString

0

的的printf引起分段錯誤,如printf預計,臨時一個字符指針和你傳遞一個字符給它。