c语言,关于malloc(strlen(str)+1)问题


#include <stdio.h>
#include <string.h>

int main(int argc,char const *argv[]) {
    //目的必须要先分配空间
    //最小空间
    char *b="hello";
    printf("%d\n",strlen(b));
    char *a=(char*)malloc(strlen(b)+1);
    printf("%d",strlen(a));
    strcpy(a,b);
    printf("a=%s\n",a);
    printf("b=%s\n",b);
    return 0;
}

img

恳请大家帮帮忙,谢谢了

有什么问题?
使用malloc需要引入#include <stdlib.h>

char *a=(char*)malloc(strlen(b)+1); 只是为a分配了空间、但没有对空间的内容赋值。
空间的内容是随机不确定的,strlen(a)的值也就随机不确定了。
你先用 strcpy(a,b); 对a空间的内容赋值。再输出  printf("%d",strlen(a));就正常了。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char const *argv[]) {
    //目的必须要先分配空间
    //最小空间
    char *b="hello";
    printf("%d\n",strlen(b));
    char *a=(char*)malloc(strlen(b)+1);
    strcpy(a,b);
    printf("%d",strlen(a));
    printf("a=%s\n",a);
    printf("b=%s\n",b);
    return 0;
}

img


你的编译器是不是有问题

char *b="hello";
strlen(b)的值是5,如果要把b的值复制给a,那么就需要给a申请6个字节,第6个字节用来存放字符串结束符0
所以在malloc的时候需要strlen(b)+1
另外,malloc需要包含stdlib.h头文件。
return前,需要释放空间:free(a);