【问题标题】:concatenate initialize variable to zero in c++在c ++中将初始化变量连接为零
【发布时间】:2011-11-23 20:40:03
【问题描述】:

有谁知道 strncat 不能将 char 初始化为零的原因吗?代码如下

int main()
{
uint8 uibuffer[4] = {0};
uint8 txbuffer[10] = "ab";
uint8 rxbuffer[4] = "cde";

strncat((char*)txbuffer,(char*)uibuffer, 4);
strncat((char*)txbuffer,(char*)rxbuffer, 4);
for (int i = 0; i < sizeof(txbuffer); i += 1)
{
    cout << (int(txbuffer[i]))<<" : "<< char(int(txbuffer[i]))<<endl;
}
return 0;
}

现在的输出是

97 : a
98 : b
99 : c
100 : d
101 : e
0 : 
0 : 
0 : 
0 : 
0 : 

想要的输出是

97 : a
98 : b
0 : 
0 : 
0 : 
0 :    
99 : c
100 : d
101 : e 
0 : 

【问题讨论】:

  • strncat 在遇到\0 时停止复制,并且“ab”形式的字符串实际上在其末尾有一个。您需要一个自定义函数来实现这一点。
  • 有什么原因你不能用 std::string 做到这一点?
  • 背后的原因是因为我连接了char数组和需要转换为char数组的整数

标签: c++ concatenation


【解决方案1】:

您正在寻找memcpy,C 中的字符串以第一个 0 字符结尾。

【讨论】:

  • memcpy() 也不一定有效,因为\0 之外的字符最终可能会被编译器设置为垃圾。
  • @scorpiodawg:你的意思是 txbuffer 中剩下的 7 个 uint8?那些不能有垃圾值。
猜你喜欢
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多