Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;标准保证字符串文本在程序二进制文件中存储为未经修改的文本?_C++_Standards - Fatal编程技术网

C++ C++;标准保证字符串文本在程序二进制文件中存储为未经修改的文本?

C++ C++;标准保证字符串文本在程序二进制文件中存储为未经修改的文本?,c++,standards,C++,Standards,例如,如果你有一个程序 int main() { const char* str = "1111111111111111111111111111111111111111111"; printf("%s", str); return 0; } 编译它时,如果在生成的二进制文件中搜索“1111111111111111111111111111111111”(忽略编码等问题),是否保证找到它,或者编译器是否允许生成代码,例如,分配堆内存,使用循环将其填充为“1”,然后修复对该

例如,如果你有一个程序

int main()
{
    const char* str = "1111111111111111111111111111111111111111111";
    printf("%s", str);

    return 0;
}
编译它时,如果在生成的二进制文件中搜索“1111111111111111111111111111111111”(忽略编码等问题),是否保证找到它,或者编译器是否允许生成代码,例如,分配堆内存,使用循环将其填充为“1”,然后修复对该字符串文本的所有引用以指向堆内存?(然后确保它在正确的时间被解除分配,诸如此类)


我怀疑是否有任何实现能真正做到这一点。。。但是如果它符合标准,它会符合标准吗?

C++没有任何“程序二进制”的概念,所以这个问题没有真正意义


保证是通过递增和取消引用指针
str
,获得字符串中的所有字符,即当程序运行时,字符串连续存储在内存中。

我认为编译器没有任何理由这样做,而不是在编译程序中对其进行编码

不,标准没有说明字符串文本存储的位置和方式。这是一个实现细节。

这将取决于编译代码的计算机的编译器和体系结构。C++标准不影响代码以二进制格式存储。

二进制存储不受C++标准

的影响。标准(我正在看2005年的工作草案,因为没有人没有钱买教科书…)规定的唯一内容是字符串文本的内容(无论是窄还是宽)、类型、存储持续时间、转义序列和相邻字符串文本的串联。瞧。@Fabrizio你什么意思?它将永远不会存储在std::vector@Fabrizio:它们只是数组。这就像是“你好”被替换为
foo(uu literal0)
,其中
静态常量char u literal0[]={'H','i','\0'}。只有当您确实按照“仿佛”规则这样做时(或者更确切地说,编译器无法证明,在未定义的行为中,您没有这样做),才会做出这种保证。当外部程序检查可执行文件的内存时,发生什么情况不由C++标准定义。