#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;
}
恳请大家帮帮忙,谢谢了
有什么问题?
使用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;
}
char *b="hello";
strlen(b)的值是5,如果要把b的值复制给a,那么就需要给a申请6个字节,第6个字节用来存放字符串结束符0
所以在malloc的时候需要strlen(b)+1
另外,malloc需要包含stdlib.h头文件。
return前,需要释放空间:free(a);