猿问

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

#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;
}


mrs_empress
浏览 2522回答 1
1回答

onemoo

代码第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的,是无法修改的! 所以你成功申请了这段内存也无法向其中写入。
随时随地看视频慕课网APP
我要回答