我注意到,在用 malloc()
分配的数组中写入字符串时,它的值会发生变化。需要明确的是,这里是复制此“错误”的代码:
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#define N (20)
int main()
{
char * a_p;
a_p = malloc( N * sizeof(char));
printf(" * 01 pointer -> %p\n", a_p);
a_p = "something";
printf(" * 02 pointer -> %p\n", a_p);
printf("-- TEST --\n");
return 0;
}
执行时,输出为:
* 01 pointer -> 0x1332010
* 02 pointer -> 0x4006b9
-- TEST --
虽然我期待相同的值,因为我没有改变指针指向的位置(至少没有直接改变)。这在使用 free()
时会导致问题。木头下发生了什么?我错过了什么?如何以正确的方式做这些事情?
最佳答案
你的问题
您正在使用 malloc()
为您的指针分配内存,但随后您将您的指针变量分配给其他东西(“something”
,它有自己的地址),而不是填充新分配的指针。
解决方案
您应该使用分配内存并在分配的内存中复制字符串的 strdup()
函数:
a_p = strdup("something");
或者 strcpy()
函数,它接受一个 malloc()
指针和一个要复制到指向内存中的字符串:
a_p = malloc(N * sizeof(char));
strcpy(a_p, "something");
关于c - 指向字符串的指针意外更改其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47971202/