代码之家  ›  专栏  ›  技术社区  ›  John

如何读取C中函数的参数字符串?

  •  0
  • John  · 技术社区  · 7 年前

    我正在尝试创建一个哈希键函数,该函数将对给定字符串进行操作。然而,由于在C中,字符串是一个char类型的数组,其中数组的长度与用户输入字符串的长度不匹配,因此我很难理解如何在不读取用户输入的字符串的情况下读取给定字符串。

    我尝试使用calloc,但似乎无法在函数的参数内初始化

        int hashKey(char *c = calloc(100, sizeof(char)){
        int i = 0;
        int k;
        int h = 0;
        while (*(c+i) != 0){
             i++;
        }
    
        for(k = 0; k<i; k++){
             h += *(c+k);
        }
        h = h%10;
        return h;
        }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   4386427    7 年前

    C中的字符串是以nul结尾的字符数组,因此您可以简单地继续,直到遇到字符串终止(nul)。

    例如:

    int hashKey(char *c){
        int k;
        int h = 0;
    
        for(k = 0; c[k]; k++){
               //  ^^^ stop when the termination is reached
             h += *(c+k);  // or: h += c[k];
        }
    
        h = h%10;
        return h;
    }
    

    另一种实现方式可以是:

    int hashKey(char *c){
        int h = 0;
    
        while(*c){
             h += *c;
             ++c;   // Move to next char
        }
    
        h = h%10;
        return h;
    }
    
        2
  •  0
  •   doubleYou    7 年前

    在你的案例中,你不需要知道字符串的长度。

    只需在 while 回路,即。

    while (c[i] != 0)
    {
        // calc. hash
    }
    

    如果确实需要字符串长度,可以让调用者提供,也可以使用 strlen() 作用如果性能存在问题,应首选第一个选项。