如果我有一個函數:爲什麼我不能一個指向字符緩衝區傳遞給函數PARAM字符**
void myfunction(char** s);
然後我可以通過一個char *這樣的:
char* s = malloc(100);
myfunction(&s);
但我的編譯器不允許我這樣做:
char s[100] = {0};
myfunction(&s);
我認爲,一個指向緩衝區應該由編譯器被允許。
如果我有一個函數:爲什麼我不能一個指向字符緩衝區傳遞給函數PARAM字符**
void myfunction(char** s);
然後我可以通過一個char *這樣的:
char* s = malloc(100);
myfunction(&s);
但我的編譯器不允許我這樣做:
char s[100] = {0};
myfunction(&s);
我認爲,一個指向緩衝區應該由編譯器被允許。
您的函數需要一個指向指針的指針(char **
)。您嘗試將指針傳遞給數組,而不是(char (*)[100]
)。你爲什麼期望這個「被編譯器允許」?數組不是指針。數組和指針是完全不同性質的對象。指向指針的指針與指向數組的指針沒有任何兼容性。你不能交替使用它們。
如果你願意,你用你的基於陣列的緩衝與預計char **
一個功能,你必須明確地創建一個指向該緩衝區第一
char s[100] = {0};
char *ps = s;
,然後將指針傳遞到指針,如您之前做過
myfunction(&ps);
#include <stdio.h>
#include <stdlib.h>
void myfunction(char* s[]){
printf("Here: %s",s);
}
int main(){
char s[100] = {'a'};
//char s[100] = "myString";
myfunction(&s);
}
這適用於Windows不知道在Linux上
這個「有效」是因爲你的編譯器使用了非常寬鬆的錯誤檢查,並且因爲你的代碼包含了「偶數個錯誤」,它們相互補償(2個錯誤)。第一個錯誤是對'myfunction'的非法調用:它預計'char **',你提供'char(*)[100]'代替。第二個錯誤是對'printf'的無效調用:它期望'char *',而您提供'char **'。增加編譯器中的錯誤檢查級別,並且它應該捕獲這兩個錯誤(至少是第一個錯誤)。在C模式下試用這個http://comeaucomputing.com/tryitout,以獲得更多的書面分析。 – AnT
可能的重複[char *和char **之間的區別(在C中)](http://stackoverflow.com/questions/7065277/difference-between-char-and-char-in-c) –
Bo Persson - 如何它可能與該鏈接重複? –