使用C指针的简单函数

使用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

我有下一个代码,我不理解“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并验证char
dest!=使用malloc后为空。

您可以使用strcpy在dest中复制s1“012345678”=====>。

您不了解的具体内容是什么?一种将垃圾值设置为
dest
-1的方法。这只是一个有效的评论,但不是一个答案。你能详细解释一下为什么它无效吗?谢谢。否决票被删除。您确定仅仅取消引用您分配的内存会导致未定义的行为吗?如果是这样的话,一个标准的参考将是有用的。@simonc;好啊让我看一下标准。@simonc:Valgrind(memcheck)将此报告为内存错误,据我所知是UB。有关参考信息,请参见。@haccks谢谢您的参考。我不确定我读它的方式是否与你相同,但我可以理解为什么这可能意味着UB+1这只是我在某处看到的一个关于不安全编码的示例。我不明白的是指针赋值*(char*)malloc…这意味着:1)运行malloc 2)将其结果从空指针转换为char指针3)使用char指针我们现在必须访问它所指向的char