2014-09-30 17 views
-3

我已經編寫了一個C函數,其目的是記住字符'b'是否在char數組'a'中。我對指針和學習很陌生。根據我的理解(到目前爲止我所讀到的),'abc'的char []的第一個元素應該是'a'。嘗試引用char中的第一個元素時C中的分段錯誤*

So if I reference: 
*a, it should equal 'a'. Which I tested with: 
printf("%s", (*a == 'a')? "true\n" : "false\n"); 

And it printed true, which is cool. 

的問題是,如果我嘗試:

printf(*a); 
I get: Run Command: line 1: 8769 Segmentation fault: 11 ./"$2" "${@:3}" 

我在做什麼錯在這裏?我們的目標是在'abc'中獲得對'a'的引用,並將它的相等性檢查爲'b'。如果不是,那麼我想通過一個計數器增加'a'中的下一個字符,等等。

+0

如何'的printf(*一);'有助於檢查是否目標''一''等於''b''? – 2014-09-30 03:05:57

+0

它不是我想看看如果printf(* a)會打印'a' – asdf 2014-09-30 03:13:54

+0

啓用(和讀取)編譯器警告。如果指示更嚴格,大多數編譯器將會有所幫助。 – user2864740 2014-09-30 03:21:54

回答

2

printf takes a pointer as it's first argument,並且您正在傳遞一個字符,該字符被解釋爲一個地址,在該地址處有一個以空字符結尾的字符數組。位於地址'a'(即hex 61)的內存可能不屬於你的進程,因此seg故障。

進行擴展以這個答案,這裏是一個printf調用,應該讓你你所需要的檢測:

printf("%c", *a); // to print the first char of the string at a 
printf("%s", a); // to print the full string at a 
1

printf的第一個參數必須是char *,它也必須指向一個字符串。你用char來調用它。這必須生成編譯器錯誤。您應該注意您的編譯器錯誤/警告消息。