【发布时间】: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。