2011-05-01 97 views
0

我在函数返回类型和指针方面遇到了一些麻烦(对不起,如果这是一个愚蠢的问题,但在一段时间内没有编程C)。当我运行此:函数返回类型和指针

#include <stdio.h> 
#include <string.h> 
#include <strings.h> 

char *parse(char const *data) { 
    return data; 
} 

int main(int argc, const char *argv[]) { 
    char *a = "# Test"; 
    char newString = parse(a); 
    printf("%s\n", &newString); 
    return 0; 
} 

我得到一个错误:

writer.c: In function ‘parse’: writer.c:6: warning: return from incompatible pointer type 
writer.c:6: warning: function returns address of local variable writer.c: In function ‘main’: 
writer.c:11: warning: initialization makes integer from pointer without a cast 

任何想法?

回答

2

parse(a)返回char*,而newString是char的类型,因此它们不兼容。

更改此:

char newString = parse(a); 
printf("%s\n", &newString); 

这样:

char *newString = parse(a); 
printf("%s\n", newString); 

关于你的错误/警告:

writer.c: In function ‘parse’: writer.c:6: warning: return from incompatible pointer type

将返回const char*,而你的函数返回类型为char*

writer.c:6: warning: function returns address of local variable writer.c: In function

数据被认为是一个局部变量,并且您返回此地址,如果它在函数内部定义的话可能会很危险。

分配char*char

而作为一个侧面说明:当您使用字符指针常量字符串,使其常量:const char *a = "# Test";

+0

的感谢!但我仍然收到错误:'writer.c:在函数'parse'中: writer.c:6:warning:从指针目标类型返回丢弃限定符' – errorhandler 2011-05-01 02:44:16

+0

请参阅编辑。我认为你会发现它是有帮助的,而且,警告不是一个错误,但它很好,你把它当作:) – MByD 2011-05-01 02:48:24

+0

谢谢,我从不喜欢有任何警告,有时我加快修复警告比错误更长! – errorhandler 2011-05-01 02:50:56