2015-06-10 3 views
0

Я не могу понять, что вызывает эту проблему ... оцените любую помощь! Я пробовал много кодов для strlen, но этот был единственным, что я мог реализовать только с 1 ошибкой. С помощью этого кода я пытаюсь прочитать строку из файла, разбить ее на слова, разделенные пробелом, определить длину и затем распечатать слово и длину для пользователя.Попробуйте использовать strlen, но получите ошибку: конфликтующие типы для '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("%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

использование прочее name. например, 'void print_strlen (char * nstr)' вместо 'size_t strlen (char * nstr)' – BLUEPIXY

+0

Попробуйте присвоить этому массиву символов что-то помимо 'str'? Это может быть уже определено. – cehnehdeh

ответ

1

Вы вызываете функцию с именем STRLEN() в функцию также называют STRLEN(), что делает его рекурсивным и, что хуже, бесконечно рекурсивным! Кроме того, вам не нужно иметь локальную копию nstr в str только для определения ее длины. И, наконец, есть ли причина, по которой не используется стандартная функция strlen(), объявленная в string.h?

0

size_t strlen(const char *) уже определен в <string.h>, поэтому конфликт.
Вы должны выбрать другое имя функции для своей функции.

0

1> Стандартная строка противоречит локальным параметрам strlen. (Вероятно, ошибка конфликта здесь)

2> Функция fuction неправильно закодирована, вызывая рекурсивно сама без какой-либо точки выхода.

Первый может быть проигнорирован, поскольку локальное определение будет перегружать одно в string.h Но проблема в функции.

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]; 

который затем копирует входной НСТР на ул.

Это нормально, если длина строки не превышает 79 (обратите внимание, что для строки есть нулевой ограничитель «\ 0»). Но как только длина вашей строки превысит этот предел, ваш результат будет немного забавным!

 Смежные вопросы

  • Нет связанных вопросов^_^