c - 如何使用 getline(s, lc) 函数更新 int 变量而不使用 "pointers"? (C)

标签 c string variables int procedure

我正在 K&R C 中做练习 2-5,我决定实现一个名为 getline(s, lc) 的函数,其中 s 是用于连接字符的字符串其中 lc 是一个用于计数行数的整数。

你们可能会说这可能是重复的,但我将首先解释这个问题有何不同。

  1. Update (int) variable in C inside a function [duplicate] - 这涉及指针,但我问如何在不使用指针的情况下更新变量。我在这方面是个“n00b”。

  2. 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';
}

And here's the link.

有没有办法使用函数而不使用指针来通过 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/

相关文章:

c - 如何在不阻塞的情况下检查线程是否完成?

c - 弹跳游戏显示多个球

c++ - 存储无效指针是否会自动执行未定义行为?

javascript - 在保持 JSON 文件完整的同时替换 Javascript 中的字符串

function - 如何在Lua中检索表中的另一个变量?

linux - 将堆栈大小增加到 20 gb,出现整数溢出错误

java - 有没有办法在java中截断字符串数组(不使用循环)并直接转换为整数?

Java 生成字符串的所有可能排列

c++ - 自定义类的类型转换 - C++

java - Checkstyle 在最终变量的命名约定上与普通 Java 不同?