簡體   English   中英

為什么以下 c 代碼在 turbo c 中工作而不是在 devc++ 中工作?

[英]Why does the following c code work in turbo c and not in devc++?

我有以下一段代碼:

char *str;
gets(str);

現在它在 turbo c 中工作,但在 devc 中失敗。

我必須添加以下內容才能使其在 devC++ 中工作。

char *str = malloc(5);

誰能解釋一下,為什么會這樣?

此外,哪個是真實的和更正確的編碼形式。

char *str;
gets(str);

只是不可能是對的。 str沒有初始化,並gets由值臨危指針,因此它不能在內部分配它。 你只是幸運/不幸有未定義的行為

哪個是真實且更正確的編碼形式?

以上都不是。 不要使用gets 這是不安全的,因為您無法限制輸入大小。 使用指定大小的fgets (當然還有分配的緩沖區!)

#include <stdio.h>
char buffer[20];
fgets(buffer, sizeof(buffer), stdin); // reads at most 19 chars + null-termination

或有大小限制的scanf (注意 -1): scanf("%19s",buffer);

gets(str);

即使在 turbo c++ 中它也不應該工作,因為您沒有為 str 分配空間。 正確的方法

 str = (char *)malloc(sizeof(char) * (length+1));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM