我有这样的文件
GET /index.html k
GET /docencia.html k
GET /ejemplo.html k
Run Code Online (Sandbox Code Playgroud)
我想逐行阅读它并用这个分隔符将它拆分" "但是却给了我这个错误:segmentation fault(core dumped)我不知道该尝试什么.
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char ordenes[150];
char *orden[3];
char *token;
int tok;
FILE *fp;
fp = fopen(argv[1], "r");
if (fp == NULL) {
printf("File error");
exit(1);
}
while (feof(fp) == 0) {
fgets(ordenes, sizeof(ordenes), fp);
printf("%s \n", ordenes);
token = strtok(ordenes, " ");
tok = 0;
while (token != NULL) {
orden[tok] = strdup(token);
tok++;
token = strtok(NULL, " ");
}
printf("\n%s\n", orden[0]);
printf("\n%s\n", orden[1]);
printf("\n%s\n", orden[2]);
}
fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)
我第一次打电话时出现错误strdup.如果我在第一次调用之后尝试打印令牌strtok,它也会失败(相同segmentation fault core dumped),所以我猜问题就在于strtok.
你没有包含<string.h>,所以编译器在strtok的签名上应用默认参数提升,特别是它认为strtok返回一个int.
因此,编译器将采用胁迫的运营商从int以pointer to char在分配
token = strtok(ordenes, " ");
Run Code Online (Sandbox Code Playgroud)
并且此作业将编译为
token = (int->char*) strtok(ordenes, " ");
Run Code Online (Sandbox Code Playgroud)