我正在使用ANSI C并获得“警告:传递'strcpy'的参数1使得整数中没有强制转换的指针”代码如下:
#define MAX_LINE_SIZE 1024
#define DELIMITER ","
#define TICKET_NAME_LEN 40
#define TICKET_ZONE_LEN 10
struct stock_data
{
char ticket_name[TICKET_NAME_LEN+1];
char ticket_type;
char ticket_zone[TICKET_ZONE_LEN+1];
unsigned int ticket_price;
unsigned int stock_level;
};
typedef struct stock_node
{
struct stock_data * data;
struct stock_node * next_node;
} stock_node;
char temp_line[MAX_LINE_SIZE];
char *token;
int i, count = 0;
stock_node * snode = NULL;
struct stock_data * sdata = NULL;
FILE *stock_file = fopen( stockfile, "r" );
while (fgets(temp_line, MAX_LINE_SIZE, stock_file) != NULL) {
token = strtok (temp_line, DELIMITER);
count++;
snode = (stock_node *) malloc(count * sizeof(stock_node));
if (snode == NULL) { abort(); }
snode->data = (struct stock_data *) malloc(sizeof(struct stock_data));
if (snode->data == NULL) { abort(); }
i = 1;
while(token != NULL) {
switch(i) {
case 1:
strcpy(snode[count - 1].data->ticket_name, token);
break;
case 2:
strcpy(snode[count - 1].data->ticket_type, token);
break;
case 3:
strcpy(snode[count - 1].data->ticket_zone, token);
break;
case 4:
strcpy(snode[count - 1].data->ticket_price, token);
break;
case 5:
strcpy(snode[count - 1].data->stock_level, token);
break;
}
token = strtok (NULL, DELIMITER);
i++;
}
}
我收到了关于行的警告:
strcpy(snode [count - 1] .data-> ticket_type,token); (因为ticket_type是char)
strcpy(snode [count - 1] .data-> ticket_price,token); (因为ticket_price是unsigned int)
strcpy(snode [count - 1] .data-> stock_level,token); (因为stock_level是unsigned int)
我知道为什么(有点)然而我不知道如何解决它:(
解决方案是更改开关,使其显示为:
switch(i) {
case 1:
strcpy(snode[count - 1].data->ticket_name, token);
break;
case 2:
snode[count - 1].data->ticket_type = token[0];
break;
case 3:
strcpy(snode[count - 1].data->ticket_zone, token);
break;
case 4:
snode[count - 1].data->ticket_price = atoi(token);
break;
case 5:
snode[count - 1].data->stock_level = atoi(token);
break;
}
答案 0 :(得分:1)
您应该使用strcpy()
将源字符串复制到目标字符串。
如果你想首先将字符串复制到整数值,你需要将字符串转换为整数然后直接赋值。
例如,您可以使用atoi()
或strtol()
功能。