2010-05-16 180 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