簡體   English   中英

在C中使用帶指針的數組

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

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