将字符串文字和strcat合并,如何构成一个长尾?

2026-04-16 19:202阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计421个文字,预计阅读时间需要2分钟。

将字符串文字和strcat合并,如何构成一个长尾?

我无法确定为什么strcat在这种情况下对我适用:char *foo=foo; printf(strcat(foo, bar)); 它成功地为我打印出foobar。但是,根据此处的讨论和Stack Overflow上的早期主题,有人表示我无法理解strcat,它说...。

我不确定为什么strcat在这种情况下适用于我:

将字符串文字和strcat合并,如何构成一个长尾?

char* foo="foo"; printf(strcat(foo,"bar"));

它成功地为我打印“foobar”.

但是,根据此处讨论的stackoverflow上的早期主题:I just can’t figure out strcat

它说,上面不应该工作,因为foo被声明为字符串文字.相反,它需要被声明为一个缓冲区(一个预定大小的数组,以便它可以容纳我们正在尝试连接的另一个字符串).

在这种情况下,为什么上述程序成功地为我工作?

此代码调用未定义行为(UB),这意味着您无法保证将发生什么(此处失败).

原因是字符串文字是不可变的.这意味着它们不是可变的,任何这样做的尝试都会调用UB.

注意UB会出现什么困难的逻辑错误,因为它可能会起作用(今天和你的系统),但它仍然是错误的,这很可能你可能会错过错误,并且因为一切都很好而相处.

PS:在这个Live Demo中,我很幸运能得到分段错误.我说幸运,因为这个seg错误会让我调查和调试代码.

值得注意的是,海湾合作委员会没有发出任何警告,而且Clang的警告也无关紧要:

p

rog.c:7:8: warning: format string is not a string literal (potentially insecure) [-Wformat-security] printf(strcat(foo,"bar")); ^~~~~~~~~~~~~~~~~ prog.c:7:8: note: treat the string as an argument to avoid this printf(strcat(foo,"bar")); ^ "%s", 1 warning generated.

本文共计421个文字,预计阅读时间需要2分钟。

将字符串文字和strcat合并,如何构成一个长尾?

我无法确定为什么strcat在这种情况下对我适用:char *foo=foo; printf(strcat(foo, bar)); 它成功地为我打印出foobar。但是,根据此处的讨论和Stack Overflow上的早期主题,有人表示我无法理解strcat,它说...。

我不确定为什么strcat在这种情况下适用于我:

将字符串文字和strcat合并,如何构成一个长尾?

char* foo="foo"; printf(strcat(foo,"bar"));

它成功地为我打印“foobar”.

但是,根据此处讨论的stackoverflow上的早期主题:I just can’t figure out strcat

它说,上面不应该工作,因为foo被声明为字符串文字.相反,它需要被声明为一个缓冲区(一个预定大小的数组,以便它可以容纳我们正在尝试连接的另一个字符串).

在这种情况下,为什么上述程序成功地为我工作?

此代码调用未定义行为(UB),这意味着您无法保证将发生什么(此处失败).

原因是字符串文字是不可变的.这意味着它们不是可变的,任何这样做的尝试都会调用UB.

注意UB会出现什么困难的逻辑错误,因为它可能会起作用(今天和你的系统),但它仍然是错误的,这很可能你可能会错过错误,并且因为一切都很好而相处.

PS:在这个Live Demo中,我很幸运能得到分段错误.我说幸运,因为这个seg错误会让我调查和调试代码.

值得注意的是,海湾合作委员会没有发出任何警告,而且Clang的警告也无关紧要:

p

rog.c:7:8: warning: format string is not a string literal (potentially insecure) [-Wformat-security] printf(strcat(foo,"bar")); ^~~~~~~~~~~~~~~~~ prog.c:7:8: note: treat the string as an argument to avoid this printf(strcat(foo,"bar")); ^ "%s", 1 warning generated.