[英]*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.