This question already has answers here:
Closed 4 years ago.
Can the input and output strings to sprintf() be the same?
(2个答案)
我有两个具有特定值的字符串ta和tb,然后在编写时使用函数sprintf将变量ta中的这两个字符串连接起来
我得到字符串
但我得到了字符串
两行调用都有未定义的行为。您试图将
C11第7.21.6.6条功能
(2个答案)
我有两个具有特定值的字符串ta和tb,然后在编写时使用函数sprintf将变量ta中的这两个字符串连接起来
sprintf(ta,"%s+%s",ta,tb);
我得到字符串
1+2
。但我需要把字符串存储在ta中,然后我尝试sprintf(ta,"%s+%s",tb,ta);
但我得到了字符串
2+1
。我不明白为什么会这样,你能帮帮我吗?。低于完整代码int main() {
char ta[5];
char tb[5];
sprintf(ta,"%d",1);
sprintf(tb,"%d",2);
sprintf(ta,"%s+%s",ta,tb);
//sprintf(ta,"%s+%s",tb,ta); uncomment for the second case
printf("taid:%s",ta);
}
最佳答案
sprintf(ta,"%s+%s",ta,tb);
sprintf(ta,"%s+%s",tb,ta);
两行调用都有未定义的行为。您试图将
sprintf
复制到ta
本身。C11第7.21.6.6条功能
ta
函数相当于sprintf
,只是输出被写入数组(由参数sprintf
指定)而不是流。空字符写在所写字符的末尾;它不作为返回值的一部分计算。如果在重叠的对象之间进行复制,则行为未定义。关于c - Sprintf函数+顺序参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29997645/
10-12 20:21