
最后的 *str = '\0' ;
是怎么在字串末尾加上結束符的,*str不是指向首個字串陣列的指標嗎?怎么這里又變成最后一個的了?
請大神們幫忙看一下,謝謝了
uj5u.com熱心網友回復:
樓主可以研究一下*str++,(*str)++,*(str++)uj5u.com熱心網友回復:
因為前面操作了str++;這個操作會讓指標的位置向后移動一個元素;長整形轉字串,也可以考慮使用sprintf, snprintf函式,更簡單。
sprintf(buf, "%lu", dat);
uj5u.com熱心網友回復:
如果你是自己練習,僅供參考。否則就是用系統api就行了,ltoavoid Long2Str(long _l, char *outStr)
{
char cTemp[20] = { 0 }; // 臨時陣列保存的是逆序的字串
char *pTemp = cTemp;
if (_l < 0)
{
*outStr++ = '-';
_l *= -1;
}
long l1;
long l2 =_l;
do
{
l1 = l2 % 10;
*pTemp++ = l1 + '0';
l2 /= 10;
} while (l2>0);
pTemp--;
// 將逆序的字串正序拷貝到輸出串
while (pTemp >= cTemp)
{
*outStr++ = *pTemp--;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
long l = 1125412;
char str[20] = { 0 };
Long2Str(l, str);
printf("%s\n", str);
}
uj5u.com熱心網友回復:
原因在這行:
*str++ = buf[i] + '0';
//每次回圈先取str的值:*str = buf[i] + '0'
//然后str的值加1:str++
//while回圈結束后str指標移動到字串末尾。
uj5u.com熱心網友回復:
是單片機里面的一行代碼,最后那里加結束符不理解,謝謝版主大大
uj5u.com熱心網友回復:
好像參考錯了。。尷尬,小白很少發帖。。不好意思
uj5u.com熱心網友回復:
如果你是自己練習,僅供參考。否則就是用系統api就行了,ltoa
void Long2Str(long _l, char *outStr)
{
char cTemp[20] = { 0 }; // 臨時陣列保存的是逆序的字串
char *pTemp = cTemp;
if (_l < 0)
{
*outStr++ = '-';
_l *= -1;
}
long l1;
long l2 =_l;
do
{
l1 = l2 % 10;
*pTemp++ = l1 + '0';
l2 /= 10;
} while (l2>0);
pTemp--;
// 將逆序的字串正序拷貝到輸出串
while (pTemp >= cTemp)
{
*outStr++ = *pTemp--;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
long l = 1125412;
char str[20] = { 0 };
Long2Str(l, str);
printf("%s\n", str);
}
謝謝版主大大
uj5u.com熱心網友回復:
能把它在轉為,低位在后高位在前的嗎?我用這進行倒計時得時候,10s倒數到9s得時候,變成90然后80,70依次下來轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/235830.html
標籤:C語言
