使用C指针的简单函数
我有下一个代码,我不理解“dest”变量中指针到指针的赋值。有人能解释一下这个代码的含义吗使用C指针的简单函数,c,C,我有下一个代码,我不理解“dest”变量中指针到指针的赋值。有人能解释一下这个代码的含义吗 #include <string.h> #include <stdlib.h> int main(void){ char s1[] = "012345678"; char dest; dest = *(char * ) malloc(strlen(s1)); } #包括 #包括 内部主(空){ 字符s1[]=“012345678”; char dest; dest
#include <string.h>
#include <stdlib.h>
int main(void){
char s1[] = "012345678";
char dest;
dest = *(char * ) malloc(strlen(s1));
}
#包括
#包括
内部主(空){
字符s1[]=“012345678”;
char dest;
dest=*(char*)malloc(strlen(s1));
}
谢谢你的声明
dest = *(char * ) malloc(strlen(s1));
将调用未定义的行为
C11:3.4.3
1未定义的行为
使用不可移植或错误的程序结构或错误数据时的行为,
本国际标准对其无任何要求
您正在尝试取消对未初始化malloced内存的引用。此代码没有意义。它使用
malloc
分配大小为9的内存,然后将分配内存的第一个字符放入dest。问题是,分配内存的第一个字符可以是任何字符,因为分配的内存不能保证初始化。我猜您的目的是分配一个指向字符串缓冲区的指针,或者您可能希望分配内存,然后将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
}
#包括
#包括
内部主(空)
{
字符s1[]=“012345678”;
char*dest0=s1;//将s1的地址分配给dest0
char*dest1=malloc(sizeof(s1));//为dest1分配内存
strcpy(dest1,s1);//将字符串从s1复制到dest1
}
您需要更改char dest代码>按char*dest编码>并验证chardest!=使用malloc后为空。
您可以使用strcpy在dest中复制s1“012345678”=====>。您不了解的具体内容是什么?一种将垃圾值设置为dest
-1的方法。这只是一个有效的评论,但不是一个答案。你能详细解释一下为什么它无效吗?谢谢。否决票被删除。您确定仅仅取消引用您分配的内存会导致未定义的行为吗?如果是这样的话,一个标准的参考将是有用的。@simonc;好啊让我看一下标准。@simonc:Valgrind(memcheck)将此报告为内存错误,据我所知是UB。有关参考信息,请参见。@haccks谢谢您的参考。我不确定我读它的方式是否与你相同,但我可以理解为什么这可能意味着UB+1这只是我在某处看到的一个关于不安全编码的示例。我不明白的是指针赋值*(char*)malloc…这意味着:1)运行malloc 2)将其结果从空指针转换为char指针3)使用char指针我们现在必须访问它所指向的char