Home > Software design >  C Copy a string into an array of strings?
C Copy a string into an array of strings?

Time:12-29

My problem is as follows: I have text file from which I read all the contents into a single string. I now need to make an array of strings that divide the original string into equally sized chunks. I will be performing some operations on each of those chunks, but I'm having a hard time understanding how arrays of strings work in C.

In the code below, I seem to be able to achieve the splitting of my original array.

The text file is as follows:

0123456791
abcedfghij
thirt

I then put into a char array called buffer and do the following:


int n = 9;
int chunk = strlen(buffer)/division; // answer is 3
char array_chunks[9][3];
for (int i = 0; i < n; i  ){
    
    {
    int starting_point = i*chunk;
    memcpy(array_chunks[i],(buffer starting_point), chunk); 
   // buffer has 27 characters in this example
    printf(":%s\n", array_chunks[i]);
    }
}


which gives me:

012
345
679
1
a
bcd
efg
hij

th
irt

This is what I want as it gives me the original string in blocks of 3 (including the newline, which is fine for what I want to do later). However, when I once again try to print each index of the array of strings, I get the following:

for (int i =0 ; i<n; i  ){
int a = strlen(array_chunks[i]);
printf("Len: %d\n", a);
printf("Chunk:%s\n", array_chunks[i]);}
Len: 27
Chunk:0123456791
abcdefghij
thirt
Len: 24
Chunk:3456791
abcdefghij
thirt
Len: 21
Chunk:6791
abcdefghij
thirt
Len: 18
Chunk:1
abcdefghij
thirt
Len: 15
Chunk:bcdefghij
thirt
Len: 12
Chunk:efghij
thirt
Len: 9
Chunk:hij
thirt
Len: 6
Chunk:
thirt
Len: 3
Chunk:irt
Len: 27
Chunk:0123456791
abcdefghij
thirt
Len: 24
Chunk:3456791
abcdefghij
thirt
Len: 21
Chunk:6791
abcdefghij
thirt
Len: 18
Chunk:1
abcdefghij
thirt
Len: 15
Chunk:bcdefghij
thirt
Len: 12
Chunk:efghij
thirt
Len: 9
Chunk:hij
thirt
Len: 6
Chunk:
thirt
Len: 3
Chunk:irt

What I want to do is call a function on n (in this case 9) character arrays each of the size of the chunk (in this case 3) but after printing each char array it seems like it wasn't partitioned how I intended, or how it was shown to me in the first for loop. When I then go onto use these chunks I get segmentation faults. I assume I'm misunderstanding how an array of strings in C works, but I couldn't really find much information on what I'm trying to accomplish. Any help is appreciated

CodePudding user response:

Thanks to Jonathan Leffler for the solution. I had to allocate space for and then assign a null byte to each char array like so:

int n = 9;
int chunk = strlen(buffer) / division; // answer is 3
char array_chunks[9][4];
for (int i = 0; i < n; i  ) {
  {
    int starting_point = i * chunk;
    memcpy(array_chunks[i], (buffer   starting_point), chunk);
    // buffer has 27 characters in this example
    array_chunk[i][3] = '\0';
    printf(":%s\n", array_chunks[i]);
  }
}
  • Related