2011-05-01 120 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