如果你指向一个内存块的char指针,你只需要malloc()并在位置[0],[1],[2],[3],...,[n]中输入字符malloc已经在末尾提供了一个空终止符'\ 0',或者我必须在char数组的最后一个元素处提供它吗?
int i;
char B; //has the characters hello
char *A=malloc(5*sizeof(char)); //4 bytes for hello + 1 byte for null terminator?
for(i=0; i<strlen(A);i++)
A[i]=B[i];
在for循环完成之后我应该在A的最后一个元素中添加一个空终止符,还是malloc()已经提供了它?
答案 0 :(得分:1)
是您需要明确地放置一个null终止符。 malloc
只是返回指向5字节内存块的启动指针。
答案 1 :(得分:1)
在malloc
之后,A
包含垃圾值,因此您需要明确指定\0
。但是,您的代码中还有其他几个错误:
您对B
的声明有误,应该是char
数组而不是char
。
字符串"hello"
包含6个元素,包括尾随\0
,所以:
char B[] = "hello";
char *A = malloc(strlen(B) + 1);
for(i = 0; i < strlen(B) + 1; i++)
A[i] = B[i];
或者您只需使用strcpy
:
strcpy(A, B);
答案 2 :(得分:0)
Malloc不会提供填充空值的内存。
如上所述,使用strcpy并保持安全。
我编辑了calloc部分。那是错的。