【问题标题】:How to Add a String inside of another string without erasing the rest of it如何在另一个字符串中添加一个字符串而不删除它的其余部分
【发布时间】:2017-03-30 22:45:49
【问题描述】:

我在尝试在特定位置的另一个字符串中添加一个字符串时遇到了麻烦。每次我使用这段代码时,字符串的其余部分都会变为空白。

double temperature = 22.1;
unsigned char pacote[16] = "#0123456789ABCDEF";
unsigned char temp_local[3];
dtostrf(temperatura, 3, 1, temp_local);
sprintf(pacote+3,"%s", temp_local);

sprintf(pacote+3,temp_local);

得到相同的 printf:

#0122.1

代替:

#0122.16789ABCDEF

为什么它会擦除字符串的所有其余部分,而不是仅替换 [3] 之后的接下来的 4 个位置而留下其余部分。 我正在使用 arduino,但我认为这是通用的 C 问题。

非常感谢!!!

【问题讨论】:

  • 选择一种编程语言。不同的语言,不同的答案。
  • sprintf 终止它写出的字符串,因此它会在它写出的末尾截断字符串。
  • Arduino 不是 C.

标签: string arduino


【解决方案1】:

您应该将字符串数据移动到指定位置(而不是复制字符串,其中包括终止'\0'):

memcpy(pacote+3, temp_local, strlen(temp_local));

【讨论】:

  • 天哪,你是神!我的 printf 现在是 "#0122.16789ABCDE" 非常感谢!我从来没有听说过这个功能:O
【解决方案2】:

如果您使用的是 C++,则使用 string::substr

new_string = old_string.substr(0,3) + "一些文本" + old_string.substr(3);

在纯 C 中,您首先需要确保目标有足够的空间。 sprintf 返回写入的字符数。使用它来确保目的地有足够的空间。然后根据需要将两个子字符串与新字符串连接起来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多