ansi - 警告:传递'strcpy'的参数 1将指针从整数转换为整数

我在使用ANSI C,得到 "warning : passing argument 1 of 'strcpy'makes pointer from integer without a cast ",下面的代码:


#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) ; (as ticket_type is char )
strcpy(snode [count - 1] .data- > ticket_price , token) ; (as ticket_price is unsigned int )
strcpy(snode [count - 1] .data- > stock_level , token) ; (as stock_level is 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; 
 }

时间:

应该使用strcpy()将源字符串复制到目标字符串。

如果要将字符串复制到整数值,首先需要将字符串转换为整数,然后直接赋值。

例如,可以使用atoi()strtol()函数。

...