我在编译时总是遇到错误,它说未定义对“strtok_r”的引用,我在Windows 10中使用MinGW,请帮助解决这个问题。
#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
最佳答案
strtok_r 不是标准 C 方法(它是 POSIX)。您的编译器可能不兼容 POSIX,因此其标准库可能不包含该方法。查看您的 string.h 文件并查看其原型(prototype)是否已在那里声明。
关于c - 对 `strtok_r' Windows 10 MinGW 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50494670/