C - 错误定位字符和空终止符



如果你将一个字符指针指向一个内存块,你只是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() 已经提供了它?

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

malloc 之后,A包含垃圾值,因此需要显式分配。但是,代码中还有其他几个错误:

您对B的声明是错误的,它应该是一个char数组而不是单个char

字符串"hello"包含 6 个元素,包括尾随,因此:

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);

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

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

我编辑了卡洛克部分。这是错误的。

相关内容

  • 没有找到相关文章

最新更新