2

如果您将 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() 已经提供了它?

4

3 回答 3

1

的,您需要明确放置一个空终止符。malloc只是将起始指针返回到 5 字节内存块。

于 2013-09-17T05:07:11.250 回答
1

之后mallocA包含垃圾值,因此您需要\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);
于 2013-09-17T05:07:52.413 回答
0

Malloc 不会提供用空值填充的内存。

如上所述,使用 strcpy 并确保安全。

我编辑了 calloc 部分。那是错误的。

于 2013-09-17T05:08:27.880 回答