【问题标题】:Inserting "String" variable inside a given String in C在 C 中的给定字符串中插入“字符串”变量
【发布时间】:2019-04-14 01:27:23
【问题描述】:

我有一个函数,它有一个字符串参数:

function(char str[3]){
 //here i want to insert the string Parameter str
 f = open("/d1/d2/d3/test"+str+"/d2.xyz")
}

我正在尝试将字符串参数“插入”到给定的字符串路径中。如何在 C 中做到这一点?

【问题讨论】:

  • 研究snprintf(buf, sizeof buf, "/d1/d2/d3/test%s/d2.xyz", str).
  • 请注意,尽管参数定义 (char str[3]) 建议字符串限制为 2 个字符加上 null,但这不是强制的。该参数被视为您编写了char *str,并且可以提供任何长度 - 包括零字节的字符串。
  • 为什么限制为 2 个字符?它不是一个 char 数组,例如:[0,1,2,3] 吗?

标签: c string path


【解决方案1】:

典型的方法是通过将三个部分拼在一起来创建一个新字符串。做到这一点的一种方法是(无耻地从@chux 评论中窃取):

char buf[1000];
sprintf(buf, “/d1/d2/d3/test%s/d2.xyz”, str);

但在您走这条路之前,您需要确保您真正了解 printf 系列函数,因为它们是安全相关错误的常见来源。例如,我的 buf 大小对于您的示例来说足够大,但对于一般解决方案来说肯定不是。相反,需要考虑输入字符串的大小,以确保输出缓冲区足够大。

【讨论】:

  • 如果 str 没有正确地以空值终止,这也会失败。
  • 命名点:如果它不是以 null 结尾的,则它不是字符串——根据字符串的定义(C11 §7.1.1 Definitions of terms: 字符串是连续的字符序列由第一个空字符终止并包括第一个空字符。 ) 没有不以空字符结尾的字符串。有些字节数组不是以 null 结尾的,但应该是。
  • 请注意我的comment。因此,最好使用snprintf() 并检查结果是否被裁剪(并决定如何处理)。或者使用某种可变长度内存分配——VLA(可变长度数组)或通过malloc() 等进行动态分配。
  • “空终止”是什么意思?
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2011-10-19
  • 2021-12-18
  • 2020-04-02
相关资源
最近更新 更多