【问题标题】:sprintf to combine char arrayssprintf 组合字符数组
【发布时间】:2018-10-18 11:46:05
【问题描述】:

我有一个 char 数组和一些变量,我想使用 sprintf 来组合它们。

变量定义如下:

uint8_t var1;
char name1[20];
char textout1[40];

在程序的不同点我使用 strcpy 来填充 name1。

strcpy(name1, "hello");

var1 也获得了赋值

var1 = 5;

然后我想使用 sprintf 将它们组合成一个 char 数组。

sprintf(textout1, "%s %u", name1, var1);

如果我现在打印 textout1,我会得到

 5

缺少字符串/字符数组。谁能弄清楚这是为什么? 分别打印 name1 数组给了我预期的“你好”,所以 strlcpy 工作正常。

一个最小的代码示例:

#include <stdio.h>
#include <stdint.h>

uint8_t var1;
char name1[20];
char textout1[40];


int main() {
   strcpy(name1, "hello");
   var1 = 5;
   sprintf(textout1, "%s %u", name1, var1);
   printf(textout1);
   printf(name1);
   return 0;
}

【问题讨论】:

  • strcpy null-自动终止。 strlcpy又是什么意思?
  • 无法复制。看this。我用strcpy 替换了非标准的strlcpy,它不应该改变任何东西。问题可能出在您未显示的代码中。
  • @C.Winters 添加#include &lt;string.h&gt; 并重试。编译时启用警告。
  • @JorgeBellón 不要使用strncpy,它不是你想的那样。
  • @C.Winters 您发布的代码在一行上打印出hello 5hello,这正是人们对该代码的期望。你期待别的吗?你真的有这个最小示例没有显示的不同问题吗?

标签: c arrays printf


【解决方案1】:

您的字符串末尾缺少换行符或 fflush(stdout)。

printf() 将缓冲传递的字符串,直到遇到换行符。如果您想查看打印的内容,您必须添加一个

fflush(stdout); 

在程序结束时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多