我正在 K&R C 中做练习 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';
}
有没有办法使用函数而不使用指针来通过 1
更新整型变量 lc
?
我想利用我在书中学到的知识来解决这个问题,避免高级主题。
最佳答案
您可以通过使函数返回值
int getline(char s[], int lc)
{
...
return ++lc;
}
字符串通过引用传递给函数,因此您对字符串所做的任何更改都将在函数外部可见。实际上 char s[] 传递字符串所在的地址,因此您可以在 getline 函数中自由更改其内容。
getline 函数的问题是它不知道数组的最大大小,因为数组本身没有此类信息。您还应该添加大小作为参数以避免内存覆盖。
例如
int getline(char s[], int maxlen, int lc)
关于c - 如何使用 getline(s, lc) 函数更新 int 变量而不使用 "pointers"? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880654/