繁体   English   中英

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

[英]how to get certain length string into 2d array in c

我正在尝试制作一个接受字符串的函数(例如:“你好,我在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]); 

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM