2015-04-14 41 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