我的问题是关于取消引用字符指针
这是我的代码 -
#define MAX 10
char s[80]="Hello";
int main(){
char *stackValue;
stackValue=&s;//here I assined the address of s to stackValue
if(!stackValue){
printf("No place for Value");
exit(1);
}
else{
printf("\n%s",*stackValue);//This doesn't work with * before it
printf("\n%s",stackValue);//This works properly
}
return 0;
}
在上面的代码中,我已经将S []的地址分配给stackValue,当我打印* stackValue时,它不起作用,
但如果我只打印'stackValue'那就行了。
当我用Integer做同样的事情时
int main(){
int i=10, *a;
a=&i;
printf("%d",*a);//this gives the value
printf("%d",a)//this gives the address
return 0;
}
打印字符指针和整数指针是否不同。当我在int值中使用*时,它给出了值,但是当我将它用作char指针时会出错。
帮帮我吧?
答案 0 :(得分:1)
使用第一个代码段:
List<Set<Integer>>
不正确,因为stackValue=&s;
已经是char的数组。如果你这样写,那么s
变为指向的指针到char(不是指向char的指针)。
通过更改为stackValue
此外,再次stackValue=s;
期望指向char的指针(不是指向char的指针) - 这解释了为什么这不起作用
%s
您需要printf("\n%s",*stackValue); // this doesn't work
。
使用第二个代码段。
printf("\n%s",stackValue);
没问题,因为a=&i;
是一个i
,而不是数组。
答案 1 :(得分:0)
"%s"
的{{1}}格式说明符始终需要printf
参数。
所以这是正确的工作和正确的陈述
char*
并在第一个语句中传递值,因此它将为您提供未定义的行为。
答案 2 :(得分:0)
你要做的是:
int main(void)
{
char a_data = "Hello, this is example";
char *pa_stack[] = {a_data};
printf("We have: %s\n", *pa_stack);
}