2014-04-17 45 views
0

我有我的代码有问题,我不断收到编译器错误:C语言的strtok有一些错误

error message : warning: assignment makes pointer from integer without a cast

我的代码很简单:

int i; 
int arr1[8], arr2[8]; 
char test[] = "1|a|b;2|c|d;3|e|f"; 
char *split1, *split2; 

split1 = strtok(test, ";"); 
for(i = 1; i <= 8; i++){ 
    arr1[i] = split1; 
    split1 = strtok(NULL, ";"); 
    printf("result=%s\n", arr1[i]); 
} 

当我修复编译器错误,我的代码无法打印价值,反之亦然!

+0

'arr [8]'不存在;你不要使用'arr [0]' – pmg

+0

将arr1改为char * – cup

+0

为什么要将指向字符串的指针放入整数数组中? – AntonH

回答

1

除了在你的问题中提到的错误,你也有很多其他的错误。例如:

arr1[i]=split1; 

可变split1,一个指针到char,而arr1int阵列。

要将包含数字的字符串转换为整数,可以使用strtol

如果这不是你想要的,你需要做arr1字符串数组,即指针数组char

char *arr1[8]; 

你也有一个更严重的错误,一旦你得到的程序编译:数组索引是零基于。这意味着数组索引从零到大小减1,或者在arr1的情况下,索引从07(含)。索引数组越界会导致undefined behavior

未定义行为的另一种情况是这条线

printf("result=%s\n",arr1[i]); 

在这里,你想打印一个字符串,而是提供一个整数。如果您将arr1更改为字符串数组,则这不适用。

+0

该行正在从指针开始生成一个整数。错误信息表示来自整数的指针。 – Barmar

+0

为什么他会在这段代码中使用'strtol'?他的输入数据不是数字。第一个标记是'1 | a | b'。 – Barmar

3

error message : warning: assignment makes pointer from integer without a cast

您需要包括编译器正确的原型知道该函数返回(或者它会假设他们返回int)什么类型的。

strtok()的原型在<string.h>

#include <string.h> 

    split1=strtok(NULL,";"); // without a prototype 
          // the compiler assumes strtok() returns an int 
          // and complains about assigning the int to a pointer 
0

编译器发出警告,指出指针指向一个int值是错误的。首先因为指针可以是更大的尺寸,然后int。 你的情况 - 你需要指定一个不是指针,而是它引用的值(所以只需使用arr1 [i] = * split1;

但首先检查split1是否不为NULL,如果解除引用NULL值你的应用程序会崩溃

顺便说一句,我建议你注意以前的答案,因为它们包含了很多有用的信息给你。