【问题标题】:c Function is not calledc 函数未被调用
【发布时间】:2021-03-21 00:51:12
【问题描述】:

我编写的 C 函数没有被调用,尽管我将两个 char 传递给函数。我没有从 while 循环中得到我期望的返回值。有谁知道问题出在哪里?

int string_compare(char v[], char w[]);

int main (void) {
  char v[] = "N";
  char w[] = "M";
  int string_compare(char v[], char w[]);
  return 0;
}

int string_compare(char v[], char w[])
{
  int i = 0;
  while (1) {
    if (v[i] != w[i]) {
      return v[i] - w[i];
    }
    if (v[i] == '\0' || w[i] == '\0') {
      break;
    }
    ++i;
  }
  return 0;
}

谢谢!

最大

【问题讨论】:

  • 你不调用它,而是在main()中冗余声明它。

标签: c string-comparison c-strings function-call function-definition


【解决方案1】:

对于初学者来说,函数应该至少像这样声明

int string_compare( const char s1[], const char s2[] );

也就是说参数应该有限定符const,因为函数不会改变传递给它的字符串。

if 语句中的条件

if (v[i] == '\0' || w[i] == '\0') {

可以简化为

if ( v[i] == '\0' ) {

因为当控件达到这一点时v[i]w[i] 彼此相等。所以只检查一个字符是否等于0就足够了。

变量i用作索引

int i = 0;

应具有size_t 类型,因为int 类型的对象通常无法存储size_t(字符串长度)类型的所有值,即函数strlen 的返回类型或运营商sizeof.

size_t i = 0;

但是引入这个辅助变量是多余的。

反正函数的定义太复杂了。

最后这条记录在函数main

int string_compare(char v[], char w[]);

是一个冗余的函数声明。函数main 不调用函数string_compare。它只是在其块范围内再声明一个。

这是一个演示程序,展示了如何声明、定义和调用函数。

#include <stdio.h>

int string_compare( const char s1[], const char s2[] )
{
    while ( *s1 && *s1 == *s2 )
    {
        ++s1; ++s2;
    }
    
    return *s1 - *s2;
}

int main(void) 
{
    char *s1 = "N";
    char *s2 = "M";
  
    printf( "string_compare( \"%s\", \"%s\" ) = %d\n", s1, s2,
                             string_compare( s1, s2 ) );
  
    printf( "string_compare( \"%s\", \"%s\" ) = %d\n", s2, s1,
                             string_compare( s2, s1 ) );
                           
    s2 = s1;
    
    printf( "string_compare( \"%s\", \"%s\" ) = %d\n", s1, s2,
                             string_compare( s1, s2 ) );
  
                           
  
  return 0;
}

程序输出是

string_compare( "N", "M" ) = 1
string_compare( "M", "N" ) = -1
string_compare( "N", "N" ) = 0

【讨论】:

    【解决方案2】:

    这里有很多错误。要调用函数string_compare,您需要将两个字符数组传递给它。然后您需要将返回值分配给一个变量。

    所以

    int string_compare(char v[], char w[]);
    
    int main (void) {
      char v[] = "N";
      char w[] = "M";
      int x = string_compare(v, w);
      printf("%d\n", x);
      return 0;
    }
    
    int string_compare(char v[], char w[])
    {
      int i = 0;
      while (1) {
        if (v[i] != w[i]) {
          return v[i] - w[i];
        }
        if (v[i] == '\0' || w[i] == '\0') {
          break;
        }
        ++i;
      }
      return 0;
    }
    

    【讨论】:

      【解决方案3】:

      很简单,int string_compare(char v[], char w[]); 是一个函数声明,而不是函数调用。函数调用看起来像 int result = string_compare(v, w);

      【讨论】:

        猜你喜欢
        • 2016-10-30
        • 2012-07-13
        • 1970-01-01
        • 2023-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多