为了账号安全,请及时绑定邮箱和手机立即绑定

我想把其中的数组s变成const char*,怎么利用malloc,或者有其他的办法

我想把其中的数组s变成const char*,怎么利用malloc,或者有其他的办法

C
mrs_empress 2016-11-19 00:01:02
#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的,是无法修改的! 所以你成功申请了这段内存也无法向其中写入。

查看完整回答
反对 回复 2016-11-19
  • mrs_empress
    mrs_empress
    其实我想实现输入一段字符串;输出第一个字母a出现的位置。我想用strchr来实现,但他必须是const char,所以我想转化类型。我想请教一下,如果我要实现这个功能,并用到strchr函数该怎么做
  • onemoo
    onemoo
    strchr的第一个参数类型确实为const char*,正如我回答中所说,并不是只能传入const char*类型,也可以传入char*类型。 指向const类型的指针可以用指向非const类型的指针来初始化/赋值(反之不可),所以这样传参是可行的。
  • 1 回答
  • 0 关注
  • 2521 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信