我在K& RC中练习2-5,我决定实现一个名为getline(s, lc)
的函数,其中s
是连接字符的字符串,lc
是一个整数算数。
你们可能会说这可能是重复的,但我首先要解释这个问题是如何不同的。
Update (int) variable in C inside a function [duplicate] - 这涉及指针,但我问我如何在不使用指针的情况下更新变量。我是“n00b”。
How to change variable? - 这也涉及指针,但没有接受答案。
我希望程序运行如下:(总体而言)
String 0: the big brown fox jumped over lazy dog
String 1: lazy
First Occurrence: 29
我希望我的程序在整体上以这种方式工作;要求用户输入两个字符串,如果String 1:
中的一个字符与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
?
我想用迄今为止在书中学到的东西来解决这个问题,远离高级主题。
答案 0 :(得分:0)
您可以让函数返回整数作为返回值。
答案 1 :(得分:0)
您可以从函数返回lc
或使用lc
作为全局变量(最好避免使用全局变量)。
答案 2 :(得分:0)
您可以通过使函数返回值
int getline(char s[], int lc)
{
...
return ++lc;
}
该字符串通过引用传递给函数,因此您对字符串所做的任何更改都将在函数外部可见。实际上char s []传递字符串所在的地址,因此您可以在getline函数中自由更改其内容。
你的getline函数的问题是它不知道数组的最大大小,因为数组本身没有这样的信息。您应该将大小添加为参数以避免内存覆盖。
e.g。
int getline(char s[], int maxlen, int lc)