[英]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
是用來計數行的整數。
你們可能會說這可能是重復的,但我將首先解釋這個問題的不同之處。
函數內部的C中的update(int)變量[重復] -這涉及指針,但是我問如何不使用指針就可以更新變量。 我是一個“ n00b”。
如何更改變量? -這也涉及指針,沒有可接受的答案。
我希望程序像這樣運行:(總體)
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.