简体   繁体   English

警告:传递'strcpy'的参数1会使指针从整数开始而不进行强制转换

[英]warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast

I am using ANSI C and getting "warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast" for my below code: 我正在使用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++;
  }
}

I get the warning for lines: 我得到以下警告:

strcpy(snode[count - 1].data->ticket_type, token); strcpy(snode [count-1] .data-> ticket_type,token); (as ticket_type is char) (因为ticket_type为char)
strcpy(snode[count - 1].data->ticket_price, token); strcpy(snode [count-1] .data-> ticket_price,令牌); (as ticket_price is unsigned int) (因为ticket_price是unsigned int)
strcpy(snode[count - 1].data->stock_level, token); strcpy(snode [count-1] .data-> stock_level,令牌); (as stock_level is unsigned int) (因为stock_level是unsigned int)

I know why (sort of) however I don't know how to fix it :( 我知道为什么(某种),但是我不知道如何解决它:(


The solution was to change the switch so it reads: 解决方案是更改开关,使其显示为:

 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;                                                            
 }

You should use strcpy() to copy source string into destination string. 您应该使用strcpy()将源字符串复制到目标字符串。

if you want to copy string into integer value first you need to convert string into integer and then do direct assignment. 如果要先将字符串复制为整数值,则需要将字符串转换为整数,然后直接赋值。

For example You can use atoi() or strtol() Functions. 例如,您可以使用atoi()strtol()函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 传递strcpy的参数2使指针从整数转换而无需强制转换 - passing argument 2 of strcpy makes pointer from integer without a cast 传递'strcpy'的参数1使得指针来自整数而没有强制转换 - Passing argument 1 of 'strcpy' makes pointer from integer without a cast 警告:传递'strcpy'的参数2使得整数指针没有强制转换[-Wint-conversion] | - warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]| C 警告:传递“strcpy”的参数 2 使指针从整数而不进行强制转换 - C warning: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast 警告:传递“ quicksort”的参数1会使指针从整数开始而无需强制转换 - warning: passing argument 1 of 'quicksort' makes pointer from integer without a cast 警告:传递'calcFx'的参数2将使指针产生整数而不进行强制转换 - warning: passing argument 2 of 'calcFx' makes integer from pointer without a cast 传递参数 1 从指针生成整数而没有强制转换警告 - Passing Argument 1 makes integer from pointer without a cast warning 传递参数 1 从指针生成 integer 而没有对 putchar 的强制转换警告 - Passing Argument 1 makes integer from pointer without a cast warning for putchar 警告:传递'memcpy'的参数1会使指针从整数开始而无需强制转换 - warning: passing argument 1 of ‘memcpy’ makes pointer from integer without a cast 警告传递'finder'的参数2使指针从整数开始而无需强制转换 - Warning passing argument 2 of 'finder' makes pointer from integer without a cast
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM