使用C指针的简单功能

时间:2014-08-04 16:13:44

标签: c

我有下一个代码,我不理解指向“dest”变量中指针的指针。有人可以解释一下这段代码的含义吗?

#include <string.h>
#include <stdlib.h>

int main(void){
  char s1[] = "012345678";
  char dest;

  dest = *(char * ) malloc(strlen(s1));
}

谢谢

4 个答案:

答案 0 :(得分:4)

这段代码没有意义。它使用malloc来分配大小为9的内存,然后将分配的内存的第一个字符放入dest。问题是分配的内存的第一个字符可以是任何内容,因为不保证分配的内存被初始化。

答案 1 :(得分:2)

声明

dest = *(char * ) malloc(strlen(s1));  

将调用未定义的行为。

C11:3.4.3

1未定义的行为

  使用不可移植或错误的程序构造或错误数据时的行为,   本国际标准没有要求

您正试图取消引用未初始化的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。