字符串常量

 2024-01-21 03:02:47  阅读 0

在写代码的时候,发现了一个改变字符串常量的问题。网上查了资料,明白了。

来源:

请运行以下代码(仅在TC2.0中)。 不要先看结果,想想你会得到什么:

#

#

整数

主要(int argn, char* argv[])

出现当前页的脚本发生错误_当前页面脚本发生错误 未结束的字符串常量_dnf当前脚本发生错误

char* = "你好,世界!";

char* = "你好,世界!";

* = '-';

投入();

0;

输出是:“-ello,world!”;。 结果和你想象的不一样吗?

ANSI C 明确规定:修改字符串常量具有未定义的效果。

dnf当前脚本发生错误_出现当前页的脚本发生错误_当前页面脚本发生错误 未结束的字符串常量

首先我们要明白,如何获取字符串常量? 只有一种方法: char* = "Hello, world!"; 该声明获取一个字符串常量。 所以 char[] = "Hello, world!"; 可以吗? 不能! 你得到的是一个字符串变量。 好吧,回过头来,由于 ANSI C 并不要求编译器实现者专门处理字符串常量,所以有些编译器会将多个相同的字符串常量视为一个(注意:这种优化只可能在字符串常量中进行,一般不要将它们用于其他类型的字符串常量)例如:int num1 = 11; int num2 = 11;虽然是两个相同的常量,但修改num1不会影响num2),目的是为了节省内存空间,所以在上面的例子中,当修改字符串a时, b 也被修改。 从这里可以看出,TC2.0对字符串常量进行了优化,但其他编译器(如DEVC++5.0)不一定也优化。 结果可能是编译不通过,也可能编译通过但结果是垃圾。 价值。 由于这些不确定性,我们应该尽量避免修改字符串常量。

如果必须修改字符串又没有办法怎么办? 有! 一定有! 请注意:我们想要的效果是修改字符。 因此,只需要定义字符串变量,而不需要定义字符串常量。 前面提到过,可以定义 char[] = "Hello, world!"; 以数组的形式; 这样就可以在程序中修改字符串了。

尝试以下代码:

#

#

整数

主要(int argn, char* argv[])

dnf当前脚本发生错误_出现当前页的脚本发生错误_当前页面脚本发生错误 未结束的字符串常量

char[] = "你好,世界!";

char[] = "你好,世界!";

[0] = '-';

投入();

0;

现在没问题了。

OK,最后请记住:如果需要修改字符串,请使用 char[] = "Hello, world!"; 来声明吧!

标签: char 字符串常量

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码