2014-05-13 158 views
2

我有以下程序:C编译器错误

#include<stdio.h> 
#include<stdlib.h> 
int main(int argc, char *argv[]){ 
    char* number1[100] = {argv[1]}; 
    char* a; 
    char* separate = "/ \n"; 
    int alpha, beta, gamma, delta; 
    int i; 
    a = strtok(number1, separate); 
    printf("%s",a); 
} 

当我编译它,它不断给我一个警告说:“‘字符*’的不同之处,从‘诠释’间接的水平”但到目前为止我使用的都是char *。

完整的错误消息如下:

a.c: In function 'main': 
a.c:9:7: warning: assignment makes pointer from integer without a cast [enabled by default] 

(9号线:a = strtok(number1, separate);

谁能告诉我,为什么会出现这种情况,如何解决?

+0

你为什么不使用'int's你声明?或否则? – tod

+1

您会在哪一行发出警告? –

+0

我以后需要使用它们才能解决当前问题。如果让你困惑,我很抱歉。并在第9行出现警告 – user3633372

回答

5

您不包括string.h,所以strtok函数未声明。在C语言的旧版本中,允许使用未声明的函数(尽管gcc应该对此产生一个(n附加)警告 - 至少在-Wall),在这种情况下函数的返回类型被假定为是int。因此,编译器认为strtok返回一个int值,并因此警告您要将该int分配给指针。

为了解决这个问题,只需添加缺少的包括。

一旦你解决了这个问题,编译器会抱怨number1有错误的类型与strtok(它是一个指针数组而不是指针)一起使用,但这是一个不同的问题。

+0

谢谢!我知道我错过了一些东西! – user3633372

+1

@ user3633372:如果你的编译器没有告诉你一个未声明的函数'strtok()',你需要学习如何让它告诉你。 –

0

它应该是:

char number1[100]; 
strcpy(number1,argv[1]); 

此外,没有string.h中和没有警告,它假定的strtok()是一个标称函数返回一个int,因此,分型不匹配。

+0

同样的警告。我尝试了两种方法 – user3633372

+1

@Jim您的第一个选项绝对无效。 –