C-连接字符数组,然后写入标准值,这与写入单个字符不同

C-连接字符数组,然后写入标准值,这与写入单个字符不同,c,arrays,char,mandelbrot,C,Arrays,Char,Mandelbrot,所以我的任务是用C语言创建曼德尔分形。 我将保持代码简单,因为它相当多。 问题是: 在给定的文件中,分别计算每个像素(char[3]),然后通过write(1,pixeldata,3)将其写入标准输出 现在:由于这不是很有效,我想首先收集char数组char line[width*3]中一行的所有像素 一切都正常,除了输出与之前的输出有很大不同(颜色看起来有变化,等等) 代码如下: char pixelData[3]; char line[width*3]; for (y=1; y <

所以我的任务是用C语言创建曼德尔分形。 我将保持代码简单,因为它相当多。 问题是:

  • 在给定的文件中,分别计算每个像素(char[3]),然后通过write(1,pixeldata,3)将其写入标准输出

  • 现在:由于这不是很有效,我想首先收集char数组char line[width*3]中一行的所有像素

  • 一切都正常,除了输出与之前的输出有很大不同(颜色看起来有变化,等等)
代码如下:

char pixelData[3];
char line[width*3];
for (y=1; y <= height; ++y) {
...
    for (x=1; x <= width; ++x) {
    ... calculate ...

    // iterate
        for ( .... calculate ...) {
               ... calculate ....
        }
        strncat(line, pixelData, 3);        // after
        // write(1, pixelData, 3);  // before: worked
}
write(1, line, sizeof(line)); // after
memset(line, 0, sizeof(line));
charpixeldata[3];
字符线[宽度*3];

对于(y=1;y您不能将字符串函数用于可能包含0的
char
数组,也不能用于不以0结尾的
char
数组。我相信您代码中的
pixelData
只是三个小整数的数组,而不是可打印的字符串。因此
strncat
对您没有帮助。另一方面,因为你总是知道你的行有多长,你不需要
strncat
来为你计算。

你不能将字符串函数与可能包含0的
char
数组一起使用,也不能与不以0结尾的
char
数组一起使用。我相信你代码中的
pixelData
只是一个由三个小整数组成的数组,rat她不是一个可打印的字符串。因此,
strncat
对你没有帮助。另一方面,因为你总是知道你的行有多长,你不需要
strncat
来为你计算它。

你说得对,pixelData包含RGB的三个值。因为我想首先生成一整行(所以将这三个值附加到现有行)在我把它写到stdout之前,它的宽度是(3),否则我怎么做呢?@iwilltry:把它想象成一个三元组数组。第一个三元组占据位置0-2;下一个3-5;然后是4-6;等等。(或者你可以使用二维数组。)您可能想看看
memcpy
。谢谢,我是这样解决的:使用int作为行[]-数组中当前位置的运行索引,而不是memcpy(&line[I*3],pixelData,3);和increment I。非常感谢您为我指出了正确的方向:)没错,pixelData包含RGB的三个值。因为我想首先生成一整行(因此将这三个值附加到现有的行),即(宽度*3)早在我把它写给stdout之前,我该怎么做呢?@iwilltry:把它想象成一个三元组数组。第一个三元组占据位置0-2;第二个三元组占据位置3-5;然后是位置4-6;依此类推。(或者你可以使用二维数组。)您可能想看看
memcpy
。谢谢,我是这样解决的:使用int作为行[]-数组中当前位置的运行索引,而不是memcpy(&line[I*3],pixelData,3);和increment I。非常感谢您为我指出了正确的方向:)使用
memcpy
而不是
strncpy
像素数据之间可能有0听起来像个主意,但我使用strcat/strncat来连接值(line+newPixelData),我不知道与memcpyThank等效的东西,使用memcpy和指向数组中新索引的指针工作使用
memcpy
而不是
strncpy
像素数据之间可能有0听起来像个主意,但我使用strcat/strncat来连接值(line+newPixelData),我不知道与memcpyThank等效的东西,使用memcpy和指向数组中新索引的指针是有效的