我想不出是什么原因导致这个问题…感谢任何帮助!我已经为strlen尝试了很多代码,但这一个是唯一一个,我可以实现只有一个错误。使用这段代码,我试图从文件中读取字符串,将其分成以空格分隔的单词,确定长度,然后将单词和长度打印给用户。
#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("%sn",nuks);
char *parte;
// Get the first word
parte = (char*)strtok(nuks, " ");
// Get the other words
while(parte != NULL){
strlen(parte);
printf("%sn", parte);
parte = (char*)strtok(NULL, " ");
}
printf("nn");
system("pause");
return 0;
}
你将一个名为strlen()的函数调用到另一个名为strlen()的函数中,这使得它是递归的,更糟糕的是,是无限递归的!除此之外,您不需要将nstr的本地副本复制到str中,只是为了确定其长度。最后,是否有理由不使用在string.h中声明的标准strlen()函数?
size_t strlen(const char *)
已经在<string.h>
中定义,因此冲突。
您应该为您的函数选择另一个函数名
1>标准字符串与本地字符串冲突。(可能冲突错误在这里)
2>函数没有正确编码,递归地调用自身而没有任何退出点。
第一个可以忽略,因为局部定义将重载string.h中的定义
请注意,在您的代码中包含了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就可以(注意字符串有一个空终止符' ')。但是一旦字符串的长度超过了这个限制,输出就会有点奇怪!