关于strcpy在C中使用char指针的问题

Question about strcpy using char pointer in C

我正在使用 C 进行一些编程,但在使用 strcpy 时遇到了一个小问题。

char* file="It has something inside"
int size= sizeof(file);
char* file_save = malloc(sizeof(char)*size);
strcpy(file_save,file);

我的代码在最后一行停止工作。 这可能是什么问题?

这部分代码似乎出了问题。如果我在在线 gdb 中将 sizeof 更改为 strlen,它工作得很好,但它仍然在我计算机的 VS 代码的 strcpy 行中停止。谢谢你帮助我。

如评论所示,size 是变量 char 指针的大小,如果您在 64 位机器上工作,它可能是 8。所以你需要 file 指向的字符串的大小。你可以像下面这样得到:

int size = strlen(file) + 1;

strlen returns 这个字符串的字节数。每个字符串都由空终止符 [=14=] 结束。当您在文件中写入时,字符串的字节数和空终止符的字节数无关紧要,因此您需要同时计算两者。

变量file的指针类型为char *

char* file="It has something inside";

用限定符const声明指针会更好,因为您可能不会更改指针指向的字符串文字

const char *file = "It has something inside";

运算符返回的大小sizeof

int size= sizeof(file);

不依赖于指针指向的字符串,通常等于 4 或 8 个字节。

当您要复制指向的字符串文字时,您需要确定它的长度。为此,您可以使用标准字符串函数 strlen。它 returns 字符串中的字符数,直到遇到终止零字符 '[=21=]'

所以你需要写

size_t size = strlen( file );

现在您需要为 size 个字符加上一个字符串文字的终止零字符 '[=21=]' 分配内存。

char* file_save = malloc( size + 1 );

只要内存分配成功,就可以复制源字符串了。

strcpy( file_save, file );

What can be the problem here?

A pointer 不是 array 也不是 string。数组不是指针。字符串不是指针。

下面,file是一个指针

char* file = "It has something inside";
int size = sizeof(file);

sizeof(file)pointer 的大小,不是数组的大小,也不是 string 的大小。

后面的代码需要使用字符串的大小,而不是指针的大小。


要找到 string 的大小,请使用指向 string 的指针 file,然后调用strlen().

// `length` is the string length: characters up to, but not including the null character.
size_t length = strlen(file);

// `size` is the string size: characters up to, and including the null character.
size_t size = length + 1;

使用 size 确定字符串副本的分配需求。