簡體   English   中英

如何在不使用“指針”的情況下使用getline(s,lc)函數更新int變量? (C)

[英]How do I update an int variable using my getline(s, lc) function without using “pointers”? (C)

我在K&R C中進行練習2-5,我決定實現一個名為getline(s, lc)的函數getline(s, lc)其中s是用來連接字符的字符串,而lc是用來計數行的整數。

你們可能會說這可能是重復的,但我將首先解釋這個問題的不同之處。

  1. 函數內部的C中的update(int)變量[重復] -這涉及指針,但是我問如何不使用指針就可以更新變量。 我是一個“ n00b”。

  2. 如何更改變量? -這也涉及指針,沒有可接受的答案。

我希望程序像這樣運行:(總體)

String 0: the big brown fox jumped over lazy dog
String 1: lazy

First Occurrence: 29

我希望我的程序總體上以這種方式工作; 要求用戶輸入兩個字符串,並且String 1:一個字符是否與String 0:匹配String 0:它將返回該字符的第一個匹配項。

但是,讓我們專注於實現getline(s, lc)的第一部分。 將字符放在字符串中是可能的,但我想知道是否有可能更新整數變量。

到目前為止,這是我的程序運行的方式:

String 0: DEEP BLUE SKY
String 0: BLUE CAKE

BLUE CAKE所在的提示符再次應為String 1:而不是String 0:

/* getline: gets the character input and convert it into a string. */
void getline(char s[], int lc)
{
    int c, i, lim;

    lim = LIMIT;
    i = 0;

    printf("String %d: ", lc);
    while (lim > 0) {
        c = getchar();
        if (c == '\n' || c == EOF) {
            lim = 0;
        }
        else {
            s[i] = c;
            ++i;
       }
    }
    ++lc;
    s[i] = '\0';
}

這是鏈接。

有沒有一種方法可以使用函數不使用指針將整數變量lc更新為1

我想用我到目前為止在本書中學到的東西解決高級問題,從而解決這個問題。

您可以讓函數返回整數作為其返回值。

你可以返回lc從您的功能或使用lc作為一個全局變量(最好避免使用全局變量)。

您可以通過使函數返回值

int getline(char s[], int lc)
{
  ...

  return ++lc;
}

該字符串是通過引用傳遞給函數的,因此您對該字符串所做的任何更改都將在函數外部可見。 實際上,char s []傳遞字符串所在的地址,因此您可以在getline函數中自由更改其內容。

您的getline函數的問題在於它不知道數組的最大大小,因為數組本身沒有此類信息。 您還應該添加大小作為參數,以避免內存覆蓋。

例如

int getline(char s[], int maxlen, int lc)

暫無
暫無

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

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