c - 如何修复警告:C 中指针和整数之间的比较
问题描述
因此,对于我的C
代码,我正在编写一个二叉搜索树,它接收一个名为 node 的 typedef 结构,该结构具有 char* 名称和 char* 电话。我在这段代码中所做的是,我把它放在一个二叉搜索树中,并按字母顺序输出列表,旁边是 phoneNum。它有效,但我得到了错误
警告:指针和整数之间的比较
我该怎么做才能解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <stdbool.h>
#include <string.h>
#include <malloc.h>
#define MAX 10
char* nameArray[] = {"George", "Zoey", "Hannah", "David", "Avery",
"Justin", "Sasha", "Babara", "Steve", "Garnett", NULL};
char* number[] = {"610-11-1212", "508-123-1000", "617-555-1212",
"818-919-8100", "710-777-1170", "310-333-1300", "510-555-1001","333-310-3201", "445-440-0044", "220-210-2210", NULL};
int flag;
typedef struct node
{
char* name;
char* phoneNum;
struct node * left;
struct node * right;
} node_t;
//int compareStrings(char* str1, char* str2){return (strcmp(str1, str2));}
void insert(node_t * tree, char* name, char* phoneNum);
void print_tree_inorder(node_t * current);
s
int main()
{
int sum = 0;
node_t * test_list = malloc(sizeof(node_t));
/* set values explicitly, alternative would be calloc() */
test_list->name = "";
test_list->phoneNum = "";
test_list->left = NULL;
test_list->right = NULL;
for(int i = 0; i<MAX; i++){
insert(test_list,nameArray[i],number[i] );
}
printf("\n In order\n");
print_tree_inorder(test_list);
}
void insert(node_t * tree, char* name, char* phoneNum)
{
if (tree->name == 0)
{
/* insert on current (empty) position */
tree->name = name;
tree->phoneNum = phoneNum;
}
else
{
if ( strcmp(tree->name, name) < tree->name) //here
{
/* insert left */
if (tree->left != NULL)
{
insert(tree->left, name, phoneNum);
}
else /* no left nodes*/
{
tree->left = malloc(sizeof(node_t));
/* set values explicitly, alternative would be calloc() */
tree->left->name = name;
tree->left->phoneNum = phoneNum;
tree->left->left = NULL;
tree->left->right = NULL;
}
}
else /*add node to right */
{
if ( strcmp(tree->name, name) >= tree->name) //here
{
/* insert right */
if (tree->right != NULL)
{
insert(tree->right, name, phoneNum);
}
else
{
tree->right = malloc(sizeof(node_t));
/* set values explicitly, alternative would be calloc() */
tree->right->name = name;
tree->right->phoneNum = phoneNum;
tree->right->left = NULL;
tree->right->right = NULL;
}
}
}
}
}
void print_tree_inorder(node_t * current) {
if (current == NULL) return;
print_tree_inorder(current->left);
printf(" %s %s\n", current->name, current->phoneNum);
print_tree_inorder(current->right);
}
解决方案
从手册http://man7.org/linux/man-pages/man3/strcmp.3.html:
strcmp() 函数比较两个字符串 s1 和 s2。如果发现 s1 分别小于、匹配或大于 s2,则它返回一个小于、等于或大于零的整数。
所以你应该将 strcmp 的结果与 0 进行比较,而不是字符串。
推荐阅读
- typescript - 如何使 TSC 推断已使用调用重载,而不显式检查每个参数
- c# - 每个表中的列名必须是唯一的。表“AspNetUserTokens”中的列名“鉴别器”被指定了多次
- java - 在应用程序处于后台或应用程序未运行时来电时,Lenovo L18021(A5) 中未调用广播接收器
- marklogic - 查找 corb 作业 DefaultContentSourcePool 错误的原因
- ios - 即使大于高度,如何将 VStack 对齐到顶部?
- django - 如何将注册中的自定义字段保存到我的数据库中?(姜戈)
- python - SQL 在文件之间不更新
- racket - 在球拍中向左折叠
- angular - Angular 11 - subscribe() 不会修改带有或不带有 ChangeDetectorRef 的 HTML
- file - PowerBi - Powerquery:如果我们从路径加载的文件夹/文件不存在,请更改路径