mallocing char和null终止符

时间:2013-09-17 05:04:17

标签: c pointers memory null malloc

如果你指向一个内存块的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()已经提供了它?

3 个答案:

答案 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部分。那是错的。