2016-04-26 14 views
0

この関数は、awseringを停止し、私はprobを見つけることができない、誰かがそれを見つけようとすることができますか? 文字列から設計された名前と番号を私に教えてくれます。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デバッガを使用していますか? sameNameにsgementationフォールトを与えます – Ash

+0

プロトタイプ 'int sameName();'は関数の引数についてコンパイラには何も伝えていないので、前方参照としては役に立たない。 –

答えて

1

あなたは、あなたのgetNumber関数に渡したときに、あなたの2次元配列のサイズをspicifyする必要があります。詳細は、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を返す(とチェックする)ことをお勧めします。 –