【问题标题】:i need help passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [-Wint-conversion]我需要帮助传递“strcpy”的参数 2 从整数中生成指针而无需强制转换 [-Wint-conversion]
【发布时间】:2018-05-07 21:31:48
【问题描述】:

我尝试编译这段代码,但它给了我“传递‘strcpy’的参数 2 使指针从整数而不进行强制转换 [-Wint-conversion]”。谁能告诉我我需要做什么。

struct Book
{
char title[MAX_TITLE_LENGTH+1];  
char author[MAX_AUTHOR_LENGTH+1]; 
int  year;                       
};
void menu_delete_book(void)
{
char temp[300]; 
int x,b;
int no_books;
fgets(temp,MAX_TITLE_LENGTH,stdin);
{
for(x = 0; x< no_books; x++)
    {
    if (strcmp (book_array[x].title, temp) == 0)
        {
        for(x=1; x < no_books -1; x++)
            {
            for(b = x + 1; b < no_books; b++)
                {
                strcpy(book_array[x].title, book_array[b].title);   
                strcpy(book_array[x].author, book_array[b].author);
                strcpy(book_array[x].year, book_array[b].year);
                }
            }
        }
    }
}
no_books++;

【问题讨论】:

  • 请注意,fgets 保留输入缓冲区中的换行符,因此您应该在存储和比较之前remove that
  • Book::year 是一个整数,而不是字符串,所以 book_array[x].year = book_array[b].year 应该可以正常工作。
  • @John 正确的感谢方式是“接受”答案。

标签: c


【解决方案1】:

它在抱怨这条线:

strcpy(book_array[x].year, book_array[b].year);

Book::year 是一个整数,而不是字符串。改为这样做:

book_array[x].year = book_array[b].year;

警告告诉您,您传递给strcpy 的整数值被隐式转换为指针。将int 转换为pointer 几乎总是一个错误,在您的情况下,整数肯定不包含有效的指针值。

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 2019-02-16
    • 2016-05-29
    • 2016-04-22
    • 2016-03-05
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多