2014-09-30 14 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来调用它。这必须生成编译器错误。您应该注意您的编译器错误/警告消息。