尝试使用strlen但是会收到错误:'strlen'

时间:2015-06-10 02:19:23

标签: c string file strlen

我无法弄清楚导致这个问题的原因...感谢任何帮助! 我已经为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;
}

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

size_t strlen(const char *)已在<string.h>中定义,因此存在冲突。
您应该为您的功能选择另一个功能名称。

答案 2 :(得分:0)

1&GT;标准strlen与局部strlen冲突。 (可能冲突错误在这里)

2 - ;功能没有正确编码,在没有任何退出点的情况下递归调用。

第一个可以忽略,因为本地定义将重载string.h中的那个 但问题在于功能。

答案 3 :(得分:0)

请注意,在您的代码中,您已包含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')。但是一旦你的字符串长度超过这个限制,你的输出就会有点滑稽!