【问题标题】:undefined reference to `strtok_r' Windows 10 MinGW未定义对“strtok_r”Windows 10 MinGW 的引用
【发布时间】:2018-05-23 17:58:08
【问题描述】:

我在编译时总是出错,这是说我在 Windows 10 中使用 MinGW 时对“strtok_r”的未定义引用,请帮助解决这个问题。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char **argv) {
  char *test1, *test2;
  char *state1, *state2;
  char *cur1, *cur2;

  test1 = malloc(20);
  test2 = malloc(20);
  strcpy(test1, "a,b,c,d");
  strcpy(test2, "e,f,g,h");

  cur1 = strtok_r(test1, ",", &state1);
  cur2 = strtok_r(test2, ",", &state2);
  while (cur1 != NULL && cur2 != NULL) {
    if (cur1 != NULL) {
      printf("cur1 : %s\n", cur1);
    }
    if (cur2 != NULL) {
      printf("cur2 : %s\n", cur2);
    }
    cur1 = strtok_r(NULL, ",", &state1);
    cur2 = strtok_r(NULL, ",", &state2);
  };
}

这是 Windows 10 中的错误和警告消息

strtok-test.c: In function 'main':
strtok-test.c:16:10: warning: implicit declaration of function 'strtok_r' [-Wimplicit-function-declaration]
   cur1 = strtok_r(test1, ",", &state1);
          ^~~~~~~~
strtok-test.c:16:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
   cur1 = strtok_r(test1, ",", &state1);
        ^
strtok-test.c:17:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
   cur2 = strtok_r(test2, ",", &state2);
        ^
strtok-test.c:25:10: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     cur1 = strtok_r(NULL, ",", &state1);
          ^
strtok-test.c:26:10: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     cur2 = strtok_r(NULL, ",", &state2);
      ^
C:\Users\AppData\Local\Temp\ccvzdBJh.o: In function `main':
C:\Users\Desktop\New folder/strtok-test.c:16: undefined reference to `strtok_r'
C:\Users\Desktop\New folder/strtok-test.c:17: undefined reference to `strtok_r'
C:\Users\Desktop\New folder/strtok-test.c:25: undefined reference to `strtok_r'
C:\Users\Desktop\New folder/strtok-test.c:26: undefined reference to `strtok_r'
collect2.exe: error: ld returned 1 exit status

【问题讨论】:

  • 谢谢提问,我加了代码请看
  • 严格来说,这不是对您问题的回答,但我强烈建议您合并(非标准)strsep 函数的一些开源变体,可以在 glibc 中找到以及所有 BSD 的 libc。它大大优于 strtok。

标签: c gcc mingw


【解决方案1】:

strtok_r 不是标准的 C 方法(它是 POSIX)。您的编译器可能不符合 POSIX,因此其标准库可能不包含该方法。查看你的 string.h 文件,看看它的原型是否在那里声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多