문제

I'm am trying to write a program that reads in a series of strings from a text file and stores these in an array of strings, dynamically allocating memory for each element. My plan was to store each string in an array using a pointer and then grow the array size as more were read in. I am having trouble to understand why my test code below is not working. Is this a workable idea?

char *aPtr;
aPtr =(char*)malloc(sizeof(char));

aPtr[0]="This is a test";


printf("%s",aPtr[0]);
도움이 되었습니까?

해결책

In C a string is a char*. A dynamic array of type T is represented as a pointer to T, so for char* that would be char**, not simply a char* the way you declared it.

The compiler, no doubt, has issued some warnings about it. Pay attention to these warnings, very often they help you understand what to do.

Here is how you can start your testing:

char **aPtr;
int len = 1; // Start with 1 string
aPtr = malloc(sizeof(char*) * len); // Do not cast malloc in C
aPtr[0] = "This is a test";
printf("%s",aPtr[0]); // This should work now.

다른 팁

char *str; //single pointer   

With this you can store one string.


To store array of strings you Need two dimensional character array

or else array of character pointers or else double pointer


char str[10][50]; //two dimensional character array

If you declare like this you need not allocate memory as this is static declaration


char *str[10];  //array of pointers 

Here you need to allocate memory for each pointer

loop through array to allocate memory for each pointer

for(i=0;i<10;i++) 
str[i]=malloc(SIZE);

char **str;    //double pointer

Here you need to allocate memory for Number of pointers and then allocate memory for each pointer .

str=malloc( sizeof(char *)*10);

And then loop through array allocate memory for each pointer

for(i=0;i<10;i++) 
str[i]=malloc(SIZE);
char * aPtr;

is as pointer to a character, to which you allocated memory to hold exactly 1 character.

Doing

aPrt[0] = "test";

you address the memory for this one characters and try to store the address of the literal "test" to it. This will fail as this address most likley is wider then a character.

A fix to your code would be to allocate memory for a pointer to a character.

char ** aPtr = malloc(sizeof(char *));
aPtr[0] = "test";
printf("%s", aPtr[0]);

Are more elegant and more over robust approach would be to allocate the same (as well as adding the mandatory error checking) by doing:

char ** aPtr = malloc(sizeof *aPtr);
if (NULL == aPtr)
{
  perror("malloc() failed");
  exit(EXIT_FAILURE);
}

...

You are doing it totally wrong. The correct version of your code should be like this:

int main ()
{
char *aPtr;
aPtr =(char*)malloc(20*sizeof(char));
aPtr ="This is a test";
printf("%s",aPtr);
}

You can use pointer array. if you want to store multiple string. Yes I know using for loop will be easy. But I am trying to explain in simple way even a beginner can understand.

int main ()
{
char *aPtr[10];
aPtr[0] =(char*)malloc(20*sizeof(char));
aPtr[0] ="This is a test";
aPtr[1] =(char*)malloc(20*sizeof(char));
aPtr[1] ="This is a test2";
printf("%s\n%s\n",aPtr[0],aPtr[1]);
 }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top