在我的代码中,我试图在int指针和char指针之间进行比较。在strrchr完整字符串后,char指针应该保持一个整数。然后我想看看整数是否大于存储在int指针中的另一个整数。使用strcmp,或只是做> =会给我一个警告。 假设分号后总是存在一个int。
typedef struct songInfo
{
int* ratingScore;
char songName[80];
struct songInfo *prev;
struct songInfo *next;
}songInfo;
int main()
{
songInfo *head = NULL, *tail = NULL;
...
}
int insert(char *buffer, songInfo **head, songInfo **tail)
{
...
char* rating = strrchr(song, ';');
rating++;
if ((*head)->ratingScore >= rating)
...
}
答案 0 :(得分:2)
首先需要将键入字符串的整数的字符串表示形式(rating
指向的字符串表示形式)转换为第二个整数,以将其值与整数进行比较你提到的int指针指向。
您可以使用sscanf
之类的函数将字符串表示读取为整数,并且可以将读取的值与整数指针指向的值进行比较。下面是一个示例代码,可能或多或少地实现了您尝试执行的操作。
int tmp;
sscanf(rating+1, "%d", &tmp); // +1 is to skip the ';' character
if( *(*head)->ratingScore >= tmp)
{
...
}
请注意,由于您在我的回答评论中提到了ratingScore类型为int *,因此添加了ratingScore的解除引用运算符。 (另请注意,我不明白为什么你会把它保留为int *,但上面的代码应该满足你的约束)
Here在工作中使用了这个想法。
答案 1 :(得分:0)
嗯,当然你无法比较不同类型的2个指针,但无论如何,在我看来你更倾向于比较指向的值而不是指针。正如@ilim所说,你想使用strtol(*rating, NULL, 0)
或类似的东西。
答案 2 :(得分:0)
评分指向';' 等级+ 1分到你的整数让我们说A A = atoi(评级+ 1) 所以这就是:
char* rating = strrchr(song, ';');
if ((*head)->ratingScore >= atoi(rating+1))
既然您已经证明ratingScore不是整数,而是指向整数的指针,您只需要取消引用该指针。所以这就是:
char* rating = strrchr(song, ';');
if (*((*head)->ratingScore) >= atoi(rating+1))