関数がある場合:
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ではわかりません