[英]Using an array with pointers in C
您好我正在練習C,我對以下代碼有一點問題。 首先,我的程序只是讀取用戶的輸入,如果有可用的內存,它會存儲它,否則它什么也沒做。
我有一個名為“lines”的char指針數組和一個用於臨時存儲輸入的字符數組,稱為“line”。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXWIDTH 81
#define MAXLINES 100
int main ()
{
char* lines [MAXLINES];
char line[MAXWIDTH];
int i ;
int n ;
然后我將檢查我的指針數組是否有空格且輸入是否為非零。 我在for循環中填充數組,通常for-loop應該在我輸入任何內容時停止,只需按Enter或數組已滿。 如果有空格,我將檢查指針所指向的空間是否有足夠的內存。 如果沒關系(!= NULL),程序將從內存中的gets(line)復制輸入。
for (n = 0; n < MAXLINES && gets(line) != NULL; n++)
{
if ((lines[n] = malloc(strlen(line) + 1)) == NULL)
exit (1);
strcpy(lines[n], line);
}
其余代碼僅用於輸出和釋放內存。
for (i = 0; i < n; i++)
{
puts(lines[n-i-1]);
free(lines[n-i-1]);
}
return 0;
}
現在的問題是,程序運行沒有任何錯誤,但它不能按我的意願運行。 它只是執行一個infinte循環,我可以輸入,只要我想要,我想要什么,沒有任何反應。
當您鍵入空行時, gets
不會返回NULL,如果這是您嘗試檢查的內容。 它仍然是一個空字符串。 如果要查找空行,則需要檢查第一個字符是否為\\0
。
另一方面, gets
是非常不安全的,因為如果你的線路太長而導致惡臭,它會超出你的緩沖區。 而是使用fgets
,它允許您指定緩沖區的大小。 (注意fgets會在字符串的末尾添加\\n
,即使它是空行。)
好吧,首先,我建議您閱讀以下有關為什么要避免使用gets()
。 我建議使用scanf()
或fgets()
代替......
http://www.gidnetwork.com/b-56.html
然后注意你正在做一個循環到100輸入,並且只有在你輸出所有100之后。 因此,在您看到任何內容之前,您需要輸入100行輸入...
你沒有檢查空行。
你需要這樣的東西:
if('\0' == line[0])
{
break;
}
並使用fgets()而不是gets()。 它更安全。 但是,您需要這樣做:
if('\n' == line[0] || '\r' == line[0])
{
break;
}
那么,你如何終止你的輸入? 輸入一個空行無濟於事,因為行""
不是NULL
。 您是否嘗試在控制台中按Ctrl + Z(如果是Windows)?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.