2011-11-19 99 views
0

我有一个字符指针,char *buf; 我有一个整数数组,int console_buffer[256]; 我需要将console_buffer内容复制到字符buf。 我该怎么做? bufconsole_buffer是不同结构的一部分。如何将整数数组内容复制到字符指针?

+5

这个问题是病态的。你想如何在int和char之间进行转换? –

+0

我会告诉你为什么我需要这个。我正在尝试执行读取系统调用。 console_buffer被声明为整型数组,因为遇到EOF时它返回-1,所以我知道我必须在这里停下来。实际上console_buffer将包含字符。最后,在读取console_biffer后,我需要将它复制到具有char * buf成员的过程控制块结构中。 – Maxwell

+0

你可以用一个简单的循环来做到这一点。你试过什么了? –

回答

1

通过您的评论去,

buf = malloc(256); // 257 if console_buffer may be full without EOF 
/* if you want to allocate just as much space as needed, locate the EOF in console_buffer first */ 
for(int i = 0; i < 256 && console_buffer[i] != -1; ++i){ 
    buf[i] = (char)console_buffer[i]; 
} 
+0

谢谢。我的问题是,因为我在console_buffer中存储字符,将存储为ascii值,将(char)console_buffer [i]将它们转换回字符?还是我需要以不同的方式处理这个问题? – Maxwell

+0

是的,铸造到'char'完全是你想要的,因为你存储在console_buffer中的是'char'的范围。但是,如果'char'被签名,可能会出现问题。 'getc' family将unsigned char转换为int,这些可能超出签名'char'的范围,那么转换不能保证(但它几乎肯定是正确的)。 –

+0

谢谢丹尼尔,它工作。 – Maxwell

0

如果您已经分配的内存为buf,如果每个整数是0到9之间,你可以这样做:

for(int i = 0; i < 256; i++) 
{ 
    buf[i] = '0' + console_buffer[i]; /* convert 1 to '1', etc. */ 
} 

如果整数是大于9,你可以使用sprintf功能。


读你的新评论,或许你也可以从控制台缓冲区直接读取到字符数组,直到你有-1(用整数比较检查,或通过strcmp,或通过比较2最后达到你的目的字符到01)。

+0

阅读对Q.的评论 –

+0

以下代码是否可用?对于(i = 0; i <256; i ++){ pcb-> buf =(char *)console_buffer(i); } 对不起,如果我听起来很愚蠢,我刚开始使用指针,所以还不舒服。 – Maxwell

+0

@Igor Oks:我不明白。在我的console_buffer整型数组中,字符将被存储为'C','I'...(我猜ascii值将被存储在我的对吗?),并且一旦全部被读取,-1整数将被存储在结束。 – Maxwell

0

我认为这是一个更好的办法值转换为char小号

int i = 0; 
while (i <= 256) { 
    buf[i] = (char) console_buffer[i]; 
    i++; 
}