mallocを使用して文字列でポインタ配列を埋める方法が残っています。デバッグでは、配列の1番目のポインタを文字列で埋めると、1番目と2番目の要素の次の文字列が次のポインタに渡されます。ptr[i]=buff;
ptrのように見えますバフ配列に表示され続けます。Cでmallocとバッファを使用している文字列を持つポインタ配列
#include<stdlib.h>
#include<string.h>
#define size 2 //array of 2 pointers
int main()
{
int i;
char *ptr[size];
char buff[80];
for (i=0;i<size;i++)
{
memset(buff, 0, sizeof(char) * 80);
printf("Enter name:\n");fflush(stdout);
scanf("%s",buff);
ptr[i]=(char*)malloc(strlen(buff));
//ptr[i]=buff; //that was the mistake
strncpy(ptr[i], buff, strlen(buff)); //->correct answer!
printf("length %d\n",strlen(buff));
}
for (i=0;i<size;i++)
{
printf("prt[%d]=%s\n",i,ptr[i]);fflush(stdout);
}
for (i=0;i<size;i++)
{
free(ptr[i]);
}
return 0;
}
私が持っている別の奇妙な質問は、一般的に配列の長さと関係があります。配列が例えばa[10]
と宣言された場合、ポインタaは配列の最初の要素を指し示します。私は理解していないものは、長さが格納されている場所です!それはポインタの前のメモリアドレスですか?以前ですか?それともコンパイラだけと関係がありますか?おかげさまで あまりにも私が尋ねたwasntを願っています。 :)
良い本であればCの文字列を読み上げるべきです。やや難しい話題かもしれません。 – Joe
あなたが言ったように、配列が[10]と宣言されたとき、ポインタは最初の要素のアドレスを指します。しかし、長さはどこにも保存されていません。 10バイトしか使用しないことを確認するのはプログラマの仕事です!アレイのa。より一般的には、使用する配列の場合、配列の長さはプログラムによって維持されなければなりません。 – Finslicer
配列の問題を修正しましたが、元のメッセージの後にいくつかの迷惑メールが印刷されています...誰かがコードplzコメントの間違いを見ることができます。ありがとう – BugShotGG