从字符串到字符串的简单 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)
因为它是在堆上分配的,因此必须手动释放。
抱歉,如果这是一个常见问题,但我不确定为什么这段代码不会输出任何内容:
#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)
因为它是在堆上分配的,因此必须手动释放。