2015-04-14 45 views
0

我需要幫助來比較使用指針的函數上的兩個字符串,我知道如何在不使用指針的情況下做到這一點。比較通過字符指針傳遞給函數的字符串

下面是代碼:

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

char *randString(int dif); 
void compare(char *ptr, char *palabra[10]); 
int main(){ 
    srand(time(NULL)); 

    int contador = 0; 
    int dif; 
    char *palabra[10]; 
    /*while ( contador < 100){ 
     char* ptr = randString(); 
     printf ("%s\n", ptr); 

     contador++; 
    }*/ 
    printf("Dificultad: "); 
    scanf("%i",&dif); 
    char *ptr=randString(dif); 
    printf("Palabra seleccionada: %s\n",ptr); 

    printf("Introduce palabra para comparar: "); 
    scanf("%s",palabra); 

    compare(ptr, palabra); 

    getchar(); 
    return 0; 
} 

static char difone[5][100] ={ 
    {"Duck"}, 
    {"Taxi"}, 
    {"Hola Mundo!"}, 
    {"Paris"}, 
    {"Lexugon"} 
}; 
static char diftwo[5][100] ={ 
    {"colan"}, 
    {"cocuy"}, 
    {"cojee"}, 
    {"clona"}, 
    {"cobra"} 
}; 
static char difthree[5][100] ={ 
    {"cogen"}, 
    {"codee"}, 
    {"cocio"}, 
    {"cogio"}, 
    {"coces"} 
}; 

char *randString(int dif) { 
    if(dif==1){ 
     return difone[rand() % (4 - 0)] ; 
    }else{ 
     if(dif==2){ 
      return diftwo[rand() % (4 - 0)] ; 
     }else{ 
      if(dif==3){ 
       return difthree[rand() % (4 - 0)] ; 
      } 
     } 
    } 
} 

,這是比較功能:

void compare(char* ptr, char *palabra[10]){ 
    printf("Palabra seleccionada: %s\n",ptr); 
    printf("Palabra introducida: %s",palabra); 

    if(strcmp((*ptr)[1],(*palabra)[1]==0){ 
     printf("Igual"); 
    }else{ 
     printf("No igual"); 
    } 

} 
+0

1)'scanf(「%s」,palabra);'是錯誤的。因爲'palabra'是'char **',而'%s'需要'char *'。 2)如果dif不是1,2或3,你的'randString()'函數不會返回任何東西。3)所有'rand()%(4-0)'應該是'rand()%5'。 4)'void compare(char * ptr,char * palabra [10])'應該是'void compare(char * ptr,char ** palabra)'5)if(strcmp((* ptr)[1],( * palabra)[1] == 0)'沒有任何意義並且是錯誤的 –

+0

請參閱('-Wall -Wextra -pedantic' for gcc),閱讀並認真閱讀編譯器的警告。你的代碼工作得更好的機會更高 – alk

+0

我很抱歉這段代碼,但只是我想快速恢復這是這麼多警告的原因......感謝這個我現在得到了問題是解決它是指針.... – causeofhell

回答

1

所以,有幾個問題:

首先,你聲明palabra作爲數組指針到char,這是不是你想要的基礎上的代碼:

scanf("%s",palabra); 

如果你想palabra存儲的9個字符或更少一個字符串,只需將它聲明爲

char palabra[10]; 

這意味着你還需要改變你的compare函數的聲明和定義,像這樣:

void compare(char *ptr, char *palabra) 

接下來,在compare功能更改strcmp調用

if(strcmp(ptr, palabra) ==0){ 

表達(*ptr)[1]試圖取消引用ptr,然後應用下標到的結果,這是不在這種情況下工作。的*ptr結果是第一個字符的字符串ptr點的值(在difonediftwo,並difthree陣列的一個字符串)。單個字符不是數組或指針表達式,所以不能將[]運算符應用於它。

除了當它是sizeof或一元&運營商的操作數,如palabra陣列表達將被轉換(「衰變」)的指針表達,並且指針的值將是第一個元素的地址的陣列。我們聲明palabra作爲main一個的char 10元件陣列,但是當我們把它作爲一個參數傳遞給scanfcompare,該數組表達式轉換爲指針表達式,這就是爲什麼我們在定義聲明爲char *palabracompare