使用 atoi 时无法将 char 转换为 int

cannot convert char to int when using atoi

我正在创建一个函数 findBookID。当我尝试将图书 ID 转换为整数时,它显示错误。
任何人都可以为我提供解决方案来解决这个问题吗?问候。
错误最后出现在 post.

strncpy(bookId, source + pos_text + 1, len_text - pos_text);
int i = atoi(bookId);       //atoi converts the string to integer
if (id == i)
{
  return true;
}

这是我声明函数的方式

bool findBookId(char source[], int id)
{
    char input[10] = "Book ID: ";
    char bookId[5];
    int int_id = 0;
    int pos_search = 0;
    int pos_text = 0;
    int len_search = 10;
    size_t len_text = strlen(source);
    if (len_search < len_text)
    {

        for (pos_text = 0; pos_text < len_search - 1; ++pos_text)
        {
            if (source[pos_text] == input[pos_search])
            {

                ++pos_search;
                if (pos_search == len_search - 1)
                {
                    // match

                    strncpy(bookId, source + pos_text + 1, len_text - pos_text);
                    int i = atoi(bookId);       //atoi converts the string to integer
                    if (id == i){
                        return true;
                    }


                }
            }
            else
            {
                pos_text -= pos_search;
                pos_search = 0;
            }
        }
    }
    return false;
}

完整编码供参考:https://drive.google.com/open?id=1zHc_26kFPVHs0b99-gkX1hdQ3AYykCPL9KegI5QobdY

这是错误信息:函数调用不允许常量表达式

许多 IDE 的一个主要问题是缺乏清晰的警告。如果我尝试使用 GCC 编译您的代码(Google 对代码不利,您的条目会出现 C&P 错误),我会收到以下错误:

$ gcc -g3 -std=c11 -W -Wall bookid.c  -o bookid
bookid.c: In function ‘addbook’:
bookid.c:106:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ [-Wformat=]
   scanf("%s", &book.name);
   ^
bookid.c: In function ‘editbook’:
bookid.c:180:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ [-Wformat=]
   scanf("%s", &book.name);
   ^
bookid.c: In function ‘deletebook’:
bookid.c:270:5: warning: format ‘%c’ expects a matching ‘int’ argument [-Wformat=]
     printf("%c, c");
     ^
bookid.c: In function ‘findBookId’:
bookid.c:469:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (len_search < len_text) {
                  ^
bookid.c:464:7: warning: unused variable ‘int_id’ [-Wunused-variable]
   int int_id = 0;
       ^
/tmp/ccijPXxB.o: In function `main':
bookid.c:85: undefined reference to `search'
collect2: error: ld returned 1 exit status

对于第一个错误,将 scanf("%s", &book.name); 更改为 scanf("%s", book.name);

打字错误printf("%c, c");应该是printf("%c", c);

comparison between signed and unsigned integer暂时可以忽略(当然以后要修复!)

如果不需要变量,请将其注释掉。

最后一个,致命错误,其原因是一个名为 search() 的函数调用了一个名为 Search() 的函数。 C区分大小写。

区分大小写对于损坏的搜索也起着重要作用:您保护文件 booklist.txt 但想从 BookList.txt 读取(这在 Windows 中仍然有效吗?)。