如何在c中将特定长度的字符串转换为2d数组

时间:2016-10-13 16:56:00

标签: c arrays string 2d

我试图创建一个带字符串的函数(例如:" Hello我在stackoverflow")并打印出具有给定宽度的字符串。因此,如果宽度为10

你好我

在stackov上

erflow

`void Left(char* words, int width)
{
    int length = strlen(words);
    int divisions = length / width; //How many lines there will be
    if (divisions%length!=0) divisions+=1; //If some spillover
    printf("%d = divisions \n", divisions);
    char output[divisions][width];
    int i;
    int temp;
    for(i=0; i < divisions; i++)
    {
        strncpy(output[i][temp], words, width);
        output[i][width] = '\0';
        temp+= width;
    }
}`

这是我到目前为止所写的功能。因此,输出将具有与新行一样多的行,每行具有与宽度给出的文本一样多的文本。我认为我使用strncpy错了,但我不确定。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

你正朝着正确的方向前进,但有些事情需要首先得到认可:

char output[divisions][width];

是一个字符串数组,其中包含“divisions”数量的char字符串,每个字符串的大小为“width”。而strncpy将'char *'作为目标缓冲区的参数。 http://man7.org/linux/man-pages/man3/strcpy.3.html

因此,要复制案例中的数据,您需要提供目标字符串,如下所示 -

strncpy(&output[i], words, width);

这会将数据的'width'长度从字符串'words'复制到字符串'output [i]'。

现在为了使你的函数工作,你必须在每次迭代后向前移动'words'指针。例如: 前10个字节 - “Hello I am”被从'words'复制到'output [0]'所以你需要在下一次迭代中从第11个字节开始处理,所以只需添加

words += width;
printf("%s \n", output[i]); 

另外,如前面的回答所述,不要忘记字符串终结符和其他边界条件。

答案 1 :(得分:0)

字符串的宽度不包括字符串终止符,因此output[i][width] = '\0';会将终止符写入越界。