如何使用我的getline(s,lc)函数更新int变量,而不使用"指针"? (C)

时间:2014-05-27 03:32:50

标签: c string variables int procedure

我在K& RC中练习2-5,我决定实现一个名为getline(s, lc)的函数,其中s是连接字符的字符串,lc是一个整数算数。

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

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

  2. How to change variable? - 这也涉及指针,但没有接受答案。

  3. 我希望程序运行如下:(总体而言)

    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.

    有没有办法在不使用指针的情况下使用函数更新lc的整数变量1

    我想用迄今为止在书中学到的东西来解决这个问题,远离高级主题。

3 个答案:

答案 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)