我有下一个代码,我不理解指向“dest”变量中指针的指针。有人可以解释一下这段代码的含义吗?
#include <string.h>
#include <stdlib.h>
int main(void){
char s1[] = "012345678";
char dest;
dest = *(char * ) malloc(strlen(s1));
}
谢谢
答案 0 :(得分:4)
这段代码没有意义。它使用malloc
来分配大小为9的内存,然后将分配的内存的第一个字符放入dest。问题是分配的内存的第一个字符可以是任何内容,因为不保证分配的内存被初始化。
答案 1 :(得分:2)
声明
dest = *(char * ) malloc(strlen(s1));
将调用未定义的行为。
使用不可移植或错误的程序构造或错误数据时的行为, 本国际标准没有要求
您正试图取消引用未初始化的malloced内存。
答案 2 :(得分:1)
我想你的意图是指定一个指向字符串缓冲区的指针,或者你可能想要分配内存然后将s1复制到新分配的内存中。以下是正确的方法。
#include <string.h>
#include <stdlib.h>
int main(void)
{
char s1[] = "012345678";
char *dest0 = s1; // assign the address of s1 to dest0
char *dest1= malloc(sizeof(s1)); // allocate memory to dest1
strcpy(dest1, s1); // copy the string from s1 to dest1
}
答案 3 :(得分:0)
您需要更改char dest;
char *dest;
并在使用malloc后验证char dest != NULL
。
你可以使用strcpy复制s1&#34; 012345678&#34; ===&GT;在dest。