[英]*char into main and *char into a struct
以下两个代码相似,但第一个具有结构,第二个没有。
为什么此代码有效(无警告)?
#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;
}
谢谢!
都不正确,因为您将复制到未初始化变量指定的地址。 因此,这两个程序都调用未定义的行为。
程序之一有效的事实纯属偶然。 未定义行为的一种可能形式是您的程序正确运行。
您需要初始化指针以引用足够大的内存块。 例如:
char *stringa = malloc(8);
请注意,您无需在字符串文字中添加空终止符。 那是隐性的。 因此,鉴于此内存分配,您可以编写:
strcpy(stringa, "example");
您需要给字符串一些内存,以便将字符复制到其中。
使用malloc
除了第一个示例,不会编译。
当你写
struct prova {char * stringa; };
int main(){struct prova p;
strcpy (p.stringa, "example\0");
请注意,p.stringa特别指向无处,但您将其复制到该位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.