Я застрял в том, как заполнить массив указателей строками, используя malloc.В отладке я вижу, что когда я заполняю 1-й указатель массива строкой, когда он собирается перейти к следующему указателю в массиве, он передает следующую строку в 1-м и 2-м элементе ... похоже, когда я использую ptr[i]=buff;
PTR продолжает отображаться в массиве баффов.
#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 указывает на первый элемент массива.Что я не понимаю, это где хранится длина !?это предыдущий адрес памяти указателя а?Это раньше?Или это связано только с компилятором?Благодарю.Я надеюсь, что это было не слишком много, я спросил.:)