2017-06-20 174 views
-1

我坚持指针的基础知识的malloc这里是我的代码关于C指针

char *orderUp; 

orderdup = malloc(10 * sizeof(char)); 

printf("enter string"); 
scanf("\n%s",orderdup); 
printf("\n%s",orderdup);// gives scanned strings 
printf("\n%s",*orderdup);// gives empty string 

下面这个程序运行良好。我想知道为什么在printf语句中给出扫描的字符串。我的意思是它应该打印地址,但它为什么打印字符串,最后一个printf语句给出空字符串。

+1

因为'%s'正在使'printf'指望一个指针。 “Empty”字符串是您通过传递'char'来调用的未定义行为的结果之一。 –

+0

'* orderup'是一个单独的'char',并且是您用malloc分配的内存的第一个位置。你应该得到'printf(“\ n%s”,* orderdup)这一行的编译器警告;'因为'%s'格式说明符需要一个char指针(即字符串),并且你提供了一个char。 – bruceg

+1

“printf”的手册页不清楚吗?你甚至读过它吗?你的C书说什么?如果您从YouTube视频或在线教程学习C:请问作者!他们显然教了垃圾。 – Olaf

回答

1

*orderdupchar类型。您正在使用%s说明符打印char数据类型,而%s需要char *数据类型。它会调用未定义的行为。要使用打印地址%p

printf("%p", (void*)orderdup); 
+2

要打印第一个字符(如果这是预期的),使用'%c'。 – ShadowRanger