我正在尝试制作一个接受字符串的函数(例如:“你好,我在stackoverflow上”)并以给定的宽度打印出所述字符串。所以如果说宽度10

你好,我是

在stackov上



`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错误,但不确定。有什么帮助吗?

最佳答案

您正在朝正确的方向前进,但是首先需要注意一些事项:

char output[divisions][width];


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

因此,要根据您的情况复制数据,您需要提供目标字符串,如下所示:

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


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

现在,要使函数起作用,您必须在每次迭代之后将“ words”指针向前移动。例如:
前10个字节-“你好,我是”从'words'复制到'output [0]',因此在下一次迭代中需要从第11个字节开始处理,因此只需添加

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


另外,如先前答案中所述,请不要忘记字符串终止符和其他边界条件。

关于c - 如何将一定长度的字符串转换为c中的二维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40026872/

10-11 19:28
查看更多