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中的这两个字符串连接起来
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