从字符串到字符串的简单 strcpy 会使整个程序崩溃

simple strcpy from string to string crashes entire programme

抱歉,如果这是一个常见问题,但我不确定为什么这段代码不会输出任何内容:

#include <stdio.h>
#include <string.h>

int main()
{
char source[] = "hello world!";

char **destination;

strcpy(destination[0], source);

puts(destination[0]);
puts("string copied!");

return 0;
}

它看起来像在 strcpy() 崩溃,因为“字符串已复制!”也没有出现在终端

你的问题是 char **destination 是一个指向指针的空指针。 destination[0] 完全没有指向任何内容。

实际操作方法如下:

#include <stdio.h>
#include <string.h>

int main()
{
  char source[] = "hello world!";

  char destination[100];

  strcpy(destination, source);

  puts(destination);
  puts("string copied!");

  return 0;
}

或者如果您想动态确定目的地的大小:

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

int main()
{
  char source[] = "hello world!";

  char *destination = malloc(strlen(source) * sizeof(char)+1); // +1 because of null character

  strcpy(destination, source);

  puts(destination);
  puts("string copied!");


  free(destination); // IMPORTANT!!!!
  return 0;
}

确保 free(destination) 因为它是在堆上分配的,因此必须手动释放。