【发布时间】:2014-01-30 20:05:30
【问题描述】:
以下两个代码相似,但第一个有结构,第二个没有。
为什么这段代码有效(没有警告)?
#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;
}
谢谢!
【问题讨论】:
-
您没有为
stringa分配内存。它可能有效或无效,但仍然都是错误的。尝试在第一个示例中放置更大的字符串。 -
是的,我知道这是错误的,但我不明白为什么第一个代码有效! (谢谢你的回答!)
-
因为内存分配的内部机制。第一个示例可能比第二个示例分配更多的内存,或者以不同的方式。这是特定于编译器的,可能使用不同的编译器/平台会产生不同的结果。
-
第一个代码有效!只是幸运。
-
@BLUEPIXY 我认为这段代码的任何版本都是不幸的。
标签: c string struct initialization strcpy