以下两个代码相似,但第一个具有结构,第二个不具有。
为什么此代码有效(无警告)?
#include <stdio.h>
#include <string.h>
struct prova
{
char *stringa;
};
int main()
{
struct prova p;
strcpy (p.stringa, "example\0");
printf("%s\n", p.stringa);
return 0;
}
但是以下代码不起作用?
Segmentation fault (core dumped)
带有此警告:
code.c: In function ‘main’:code.c:8:9: warning: ‘stringa’ is used uninitialized in this function [-Wuninitialized] strcpy (stringa, "example\0");
#include <stdio.h>
#include <string.h>
int main()
{
char *stringa;
strcpy (stringa, "example\0");
printf("%s\n", stringa);
return 0;
}
谢谢!
最佳答案
都不正确,因为您将复制到未初始化变量指定的地址。因此,这两个程序都调用 undefined 的行为。
程序之一有效的事实纯属偶然。 undefined 行为的一种可能形式是您的程序正确运行。
您需要初始化指针以引用足够大的内存块。例如:
char *stringa = malloc(8);
请注意,您不需要在字符串文字中添加空终止符。那是隐性的。因此,鉴于此内存分配,您可以编写:
strcpy(stringa, "example");