我需要帮助来比较使用指针的函数上的两个字符串,我知道如何在不使用指针的情况下执行此操作。
以下是代码:
#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)
所以,有几个问题:
首先,您将palabra
声明为指向char
的指针数组,根据代码,这不是您想要的:
scanf("%s",palabra);
如果您希望palabra
存储一个不超过9个字符的字符串,只需将其声明为
char palabra[10];
这意味着您还需要更改compare
函数的声明和定义,如下所示:
void compare( char *ptr, char *palabra )
接下来,将strcmp
功能中的compare
来电更改为
if( strcmp( ptr, palabra ) ==0 ){
表达式(*ptr)[1]
尝试取消引用ptr
,然后将下标应用于结果,在这种情况下,不将起作用。 *ptr
的结果是字符串ptr
中指向的第一个字符的值(difone
,diftwo
和difthree
中的一个字符串阵列)。单个字符不是数组或指针表达式,因此您无法将[]
运算符应用于它。
除非它是sizeof
或一元&
运算符的操作数,否则像palabra
这样的数组表达式将被转换(“衰减”)为指针表达式,值指针的名称将是数组的第一个元素的地址。我们在palabra
中将char
声明为main
的10个元素数组,但是当我们将其作为参数传递给scanf
或compare
时,该数组表达式转换为指针表达式,这就是我们在char *palabra
的定义中将其声明为compare
的原因。