警告:传递参数1的'strcpy'使指针从整数没有转换

myzjeezk  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(195)

我正在使用ANSI C,并得到“警告:passing argument 1 of 'strcpy' makes pointer from integer without a cast”for my below code:

#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,令牌);(因为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;                                                            
 }
vlf7wbxs

vlf7wbxs1#

您应该使用strcpy()将源字符串复制到目标字符串。
如果你想把字符串复制成整数值,首先你需要把字符串转换成整数,然后直接赋值。
例如,您可以使用atoi()strtol()函数。

相关问题