2010-05-16 139 views
1

我打算在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代码。

+0

ASCII码无法将数字转换为字符像预期的产出一样。该整数可以是-2,147,483,648,2,147,483,647或之间的任何值(假设此处为32位)。字符只适合0 - 255(-128 - 127)。 – LukeN 2010-05-16 13:37:45

+0

值触发0/1 – mkind 2010-05-21 10:02:48

回答

0

我解决它使用snsprintf

for (i=0;i<max0;i++){ 
    length += snprintf(buf+length, buflen-length, "%d", content[i]); 
} 

感谢您的回答!

+0

snprintf的第二个参数是unsigned(size_t),这意味着如果长度> buflen,那么buflen-length将会下溢,并且snprintf将会愉快地写入缓冲区之外,从而产生缓冲区溢出。请注意,如果有足够的空间可用,snprintf的返回值等于写入的字节数,而不是真正写入的字节数。 – 2016-12-14 16:47:21

2

sprintf返回写入的字符数。你可以利用这个将整数附加到缓冲区。

喜欢的东西:

int pos = 0; 
for (i=0;i<max0;i++){ 
    pos += sprintf(buf+pos, "%d", content[i]); 
} 
+0

是的,我会尝试snprintf。谢谢:D ..有时第一个想法是最好的。该死的:) – mkind 2010-05-16 13:37:33

0

使用本:

for (i=0; i<max0; ++i){ 
    sprintf(buf, "%d", content[i]); 
    strcat(resultbuf, buf); 
} 
1

你可以做到这一点使用指针运算:

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; 
} 
0

我想这可能听起来很傻,但我调整你的代码是这样的: -

for (i=0;i<max0;i++){ 
    buf[i]=(char) (48+ contint[i]); 
} 

//此处48为0