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