2016-04-26 1 views
0

Эта функция останавливается, и я не могу определить проблему, может кто-нибудь попытается ее найти? Подразумевается, что он дал мне сконструированное имя и номер из массива строк.Функция массивов строк в c

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

int sameName(); 
char **getNumber(); 

char **getNumber (char *n[], char e[],int N){ 
    int a; 
    for(a=0;a<N;a++){ 
     if (sameName(n[a],e)) 
     { 
      return n[a]; 
     } 
    } 
    return "Not found!"; 
} 

int sameName(char n[], char e[]){ 
    int a; 
    for(a=0;e[a]!='\0';a++){ 
     if (n[a]!=e[a]) 
     { 
      return 0; 
     } 
    } 
    return 1; 
} 

int main(){ 
    char numbers [5] [100] ={{"Ash 031"},{"Bomberman 021"},{"Rango 120"},{"Gigo Senhas 017"},{"Marcoreano 135"}}; 
    char name [100]; 
    char a [100]; 
    scanf("%s",&a); 
    strcpy(name,getNumber (numbers,a,5)); 
    printf("%s\n",name); 
    return 0; 
} 
+0

ли вы на самом деле отлажена его? – t0mm13b

+0

с отладчиком gdb? Это дает им ошибку sgementation на sameName – Ash

+0

Прототип 'int sameName();' сообщает компилятору * ничего * о аргументах функции, поэтому он бесполезен в качестве прямой ссылки. –

ответ

1

Вы должны spicify размер вашего массива двухмерного при передаче его в getNumber функции. См. http://c-faq.com/aryptr/pass2dary.html.

И для scanf вам нужно пройти только a, так как это строка.

Принимая это плюс фиксируя ваши прототипы, как указано в комментарии выше, что дает:

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

int sameName(char n[], char e[]); 
char *getNumber (char n[][100], char e[],int N); 

char *getNumber (char n[][100], char e[],int N){ 
    int a; 
    for(a=0;a<N;a++){ 
     if (sameName(n[a],e)) 
     { 
      return n[a]; 
     } 
    } 
    return "Not found!"; 
} 

int sameName(char n[], char e[]){ 
    int a; 
    for(a=0;e[a]!='\0';a++){ 
     if (n[a]!=e[a]) 
     { 
      return 0; 
     } 
    } 
    return 1; 
} 

int main(){ 
    char numbers [5] [100] ={{"Ash 031"},{"Bomberman 021"},{"Rango 120"},{"Gigo Senhas 017"},{"Marcoreano 135"}}; 
    char name [100]; 
    char a [100]; 
    scanf("%s",a); 

    strcpy(name,getNumber (numbers,a,5)); 
    printf("%s\n",name); 
    return 0; 
} 
+0

Кроме того, могу ли я предложить вернуть (и проверить) значение NULL, а не «Не найдено!», что является абсолютно нормальной строкой. –

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