C将字符串复制到字符串数组中?

czfnxgou  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(158)

我的问题如下:我有一个文本文件,我把所有的内容都读到了一个字符串中。现在我需要创建一个字符串数组,把原来的字符串分成大小相等的块。我将对每个块执行一些操作,但是我很难理解字符串数组在C中是如何工作的。
在下面的代码中,我 * 似乎 * 能够实现对原始数组的拆分。
文本文件如下所示:

0123456791
abcedfghij
thirt

然后放入一个名为buffer的char数组,并执行以下操作:

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]);
    }
}

它给出了:

012
345
679
1
a
bcd
efg
hij

th
irt

这就是我想要的,因为它给了我3个块的原始字符串(包括换行符,这对我以后想做的事情来说很好),但是,当我再次尝试打印字符串数组的每个索引时,我得到了下面的结果:
一个三个三个一个
我要做的是调用n上的一个函数(在本例中为9个)字符数组,每个数组的大小为块的大小(在本例中为3)但是在打印每个char数组之后,它似乎没有按照我的预期进行分区,或者在第一个for循环中显示给我的方式。当我继续使用这些块时,我得到了分段错误。我想我误解了C中字符串数组的工作原理,但是我实在找不到很多关于我想要完成的事情的信息。任何帮助都是非常感谢的

kkbh8khc

kkbh8khc1#

感谢Jonathan Leffler提供的解决方案,我必须为每个char数组分配空间,然后给每个char数组分配一个空字节,如下所示:

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]);
  }
}

相关问题