C-连接字符数组,然后写入标准值,这与写入单个字符不同
所以我的任务是用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 <
- 在给定的文件中,分别计算每个像素(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和指向数组中新索引的指针是有效的