我打算在for循环中连续填充字符指针数组。要填写的内容是一个整数,所以我需要投。但我没有得到我想要的结果..连续填充缓冲区
for (i=0;i<max0;i++){
sprintf(buf, "%d", content[i]);
}
sprintf替换孔buf,但我想追加。
for (i=0;i<max0;i++){
buf[i]=(char) contint[i]
}
但这是行不通的。在我看来,我得到了内容[我]的ascii代码。
我打算在for循环中连续填充字符指针数组。要填写的内容是一个整数,所以我需要投。但我没有得到我想要的结果..连续填充缓冲区
for (i=0;i<max0;i++){
sprintf(buf, "%d", content[i]);
}
sprintf替换孔buf,但我想追加。
for (i=0;i<max0;i++){
buf[i]=(char) contint[i]
}
但这是行不通的。在我看来,我得到了内容[我]的ascii代码。
我解决它使用snsprintf
for (i=0;i<max0;i++){
length += snprintf(buf+length, buflen-length, "%d", content[i]);
}
感谢您的回答!
snprintf的第二个参数是unsigned(size_t),这意味着如果长度> buflen,那么buflen-length将会下溢,并且snprintf将会愉快地写入缓冲区之外,从而产生缓冲区溢出。请注意,如果有足够的空间可用,snprintf的返回值等于写入的字节数,而不是真正写入的字节数。 – 2016-12-14 16:47:21
使用本:
for (i=0; i<max0; ++i){
sprintf(buf, "%d", content[i]);
strcat(resultbuf, buf);
}
你可以做到这一点使用指针运算:
char *p = buf;
for (i=0;i<max;i++)
{
int num_written = sprintf(p, "%d", content[i]);
if(num_written == -1)
{
//error handling
break;
}
p += num_written;
}
我想这可能听起来很傻,但我调整你的代码是这样的: -
for (i=0;i<max0;i++){
buf[i]=(char) (48+ contint[i]);
}
//此处48为0
ASCII码无法将数字转换为字符像预期的产出一样。该整数可以是-2,147,483,648,2,147,483,647或之间的任何值(假设此处为32位)。字符只适合0 - 255(-128 - 127)。 – LukeN 2010-05-16 13:37:45
值触发0/1 – mkind 2010-05-21 10:02:48