【问题标题】:Try using strlen but get error: Conflicting types for 'strlen'尝试使用 strlen 但出现错误:'strlen' 的类型冲突
【发布时间】:2015-06-10 02:19:23
【问题描述】:

我无法弄清楚导致此问题的原因...感谢任何帮助! 我已经为 strlen 尝试了很多代码,但这是唯一一个我可以实现的代码只有 1 个错误。使用此代码,我试图从文件中读取字符串,将其分解为用空格分隔的单词,确定长度,然后将单词和长度打印给用户。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

FILE*arquivo;
char nuks[80];
char frase[80];

typedef struct node {
char palavra;
struct node* esquerda;
struct node* direita;
int altura;
} No;

size_t strlen(char *nstr)
{
int total=0;
char str[80];
strcpy(str, nstr);
total = strlen(str);
printf("|%s| is |%d|", str, total);
}

int main()
{
No* raiz = NULL;
arquivo=fopen("README.txt","r");
fgets(nuks, 79, arquivo);
printf("%s\n",nuks);

char *parte;

// Get the first word
parte = (char*)strtok(nuks, " ");

// Get the other words
while(parte != NULL){
strlen(parte);
printf("%s\n", parte);
parte = (char*)strtok(NULL, " ");
}

printf("\n\n");
system("pause");
return 0;
}

【问题讨论】:

  • 使用其他名称。例如 void print_strlen(char *nstr) 而不是 size_t strlen(char *nstr)
  • 尝试将字符数组命名为str之外的其他名称?这可能已经定义好了。

标签: c string file strlen


【解决方案1】:

您正在将一个名为 strlen() 的函数调用到一个名为 strlen() 的函数中,这使得它成为递归的,更糟糕​​的是,它是无限递归的! 除此之外,您不需要为了确定其长度而将 nstr 的本地副本放入 str 中。 最后,有什么理由不使用 string.h 中声明的标准 strlen() 函数?

【讨论】:

    【解决方案2】:

    size_t strlen(const char *) 已在&lt;string.h&gt; 中定义,因此存在冲突。
    你应该为你的函数选择另一个函数名。

    【讨论】:

      【解决方案3】:

      1> 标准 strlen 与本地 strlen 冲突。 (可能冲突错误就在这里)

      2> 函数没有正确编码,递归调用自身,没有任何退出点。

      第一个可以忽略,因为本地定义会重载 string.h 中的那个 但问题出在函数上。

      【讨论】:

        【解决方案4】:

        请注意,在您的代码中,您已经包含了 C 字符串库

        #include <string.h>
        

        有什么功能

        size_t strlen(const char *str) 
        

        返回传递给函数的字符串的长度。

        但是,在您的代码中,您尝试覆盖该函数

        size_t strlen(char *nstr)
        

        当 C 试图编译你的文件时会引起混乱。尝试为您的函数使用不同的名称。例如:

        /* This function prints the length of string */
        void print_strlen(char *nstr) {
            int total=0;
            total = strlen(nstr);
            printf("|%s| is |%d|", nstr, total);
        }
        

        另外,请注意,在您的代码中,您定义了

         char str[80];
        

        然后将输入的 nstr 复制到 str。

        只要字符串的长度不超过 79 就可以了(注意字符串有一个空终止符 '\0')。但是一旦你的字符串长度超过这个限制,你的输出就会有点好笑!

        【讨论】:

          猜你喜欢
          • 2013-01-03
          • 2016-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-01
          相关资源
          最近更新 更多