返回信息流应该是比较白痴的问题,但是找不到答案,哪位懂的赐教一下吧
代码:
#include<stdio.h>
int main()
{
const char a[10]="shishiba";
strcpy(a,"gaiyixia");
printf("%s\n", a);
return 11;
}
编译:
gcc -o test test.c
test.c: In function ‘main’:
test.c:6:2: warning: incompatible implicit declaration of built-in function ‘strcpy’ [enabled by default]
strcpy(a,"gaiyixia");
^
test.c:6:2: warning: passing argument 1 of ‘strcpy’ discards ‘const’ qualifier from pointer target type [enabled by default]
test.c:6:2: note: expected ‘char *’ but argument is of type ‘const char *’
运行:
./test
gaiyixia
为啥给个warning而不是error呢?
已经写了关键字const为什么还是可以改变呢,岂不白写const了?
另外 return写不同的数的话, 有什么意义吗?
最主要的问题:pointer target type 具体指什么,翻译成汉语是甚么呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #86959同步于 2015/5/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问个pointer type 的问题
Romapecker
2015/5/5镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
http://stackoverflow.com/questions/3228664/why-am-i-able-to-change-the-contents-of-const-char-ptr
http://www.linuxsir.org/bbs/thread239058.html?pageon=1
你把那个数组定义为const了,意思就是你保证不往里写,一旦写了就是未定义行为,也就是从什么都不发生到机器冒烟都可能发生。所以编译器没有义务帮你查错,也没有义务阻止机器冒烟。警告是很合适的。
来自「北邮人论坛手机版」
1. 这个还是跟C编译器有关,爆出的warning已经说明了,C编译器其实是检测到了这个问题,但是最后还是让你的程序过了,编译器的做法就是把之前在数组a之前写的const给忽略了,不过给你爆出个warning告知一下你。 2. 返回值可以随意填写,之后拿到不同的返回值再操作就可以了。 3. pointer target type 就是“指针所指向类型”的意思,数组名和字符串名其实都是一级指针,你要想操作里面的数据,当然是指指针所指向的数据了。