2010-07-27 89 views
1
char *test = "hello"; 

    test = change_test("world"); 

    printf("%s",test); 

char* change_test(char *n){ 
    printf("change: %s",n); 

    return n; 
} 

我嘗試使用函數傳遞一個「串」回一個字符指針,但出現以下錯誤:不能返回,並指定字符數組在C指針

賦值時將整數指針沒有投

我在做什麼錯?

回答

7

未使用前向聲明的功能將被視爲具有簽名int (...)。您應該前瞻性聲明它:

char* change_test(char*); 
... 
    char* test = "hello"; 
    // etc. 

或只是移動的定義change_test在您調用它。

0

您正在將整數轉換爲某處的指針。你的代碼是不完整的,但是在猜測之前,我會說你在使用它之前沒有定義change_test(),所以C編譯器猜測它的類型(並且假定它返回一個整數。)在調用它之前聲明change_test()所以:

char *change_test(char *n); 
1

printf()將文本打印到控制檯但不改變n。使用此代碼來代替:

char *change_test(char *n) { 
    char *result = new char[256]; 
    sprintf(result, "change: %s", n); 
    return result; 
} 
// Do not forget to call delete[] on the value returned from change_test 

調用它之前還有補充)change_test的聲明(:

char *change_test(char *n); 
+0

1.讓我們希望n指向一個少於248個字符的字符串。 2.這是C而不是C++。沒有'new',嘗試'malloc()'''calloc()'來代替。 – JeremyP 2010-07-27 12:15:02

+0

@JeremyP你是對的,謝謝你糾正我。 – 2010-07-27 14:57:52

0

感謝一羣人!沒想到我會通過午餐解決這個問題。這裏是最後的測試類

/* standard libraries */ 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

char* change_test(char*); 


int main(){ 

    char *test = "hello"; 
    test = change_test("world"); 
    printf("%s",test); 

    return (EXIT_SUCCESS); 
} 

char* change_test(char *n){ 
    return n; 
}