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