#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
int main(){
char (*s)[1000];
char *p;
char *bob;
int length;
scanf("%s",s);
bob=(const char *)malloc(sizeof(s));
p=strchr(s,'a');
if(p)
printf("%s",p);
else
printf("Not Found!");
return 0;
}
1 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
代码第8行定义的 s 不是数组! s只是个指针,指向含有1000个元素的char数组。
所以sizeof s只能得到一个指针所占用的字节数,malloc也只分配了那么一点大的内存,并且这段内存还被转型成为const char类型了——也就是该段内存中的char是不能修改的。然而接受该指针的bob却是char指针,赋值会有警告的。
在第12行,scanf中的格式化指示符是%s,意味着后面的参数是字符串(char *类型),但s的类型是指向数组的指针,所以没法正确保存输入到s中。
在第15行,strchr的第一个参数需要是const char*或char*类型,同理,你传入的s的类型也不符合。
如果你想把s当作是字符串,直接将其声明为char数组即可: char s[1000]; 使用时你要确定这里面保存的char序列是以'\0'结尾的,否则很多函数是无法将其视作字符串来处理的。 当然scanf在你输入最后会自动加上结尾的'\0',你不用担心这一点。
用malloc申请一个字符串只需要申请足够大的内存,并将其转型为char *即可。虽说转型为const char *也算能保存字符串,但是这段内存中的char都是const的,是无法修改的! 所以你成功申请了这段内存也无法向其中写入。
- 1 回答
- 0 关注
- 2521 浏览
添加回答
举报
0/150
提交
取消