gpt4 book ai didi

关于特定编译器/平台问题的 C++ null-terminated-string

转载 作者:行者123 更新时间:2023-11-27 23:19:21 25 4
gpt4 key购买 nike

我发现了一些类似的代码(以下代码中有很多问题):

//setup consistent in each of the bad code examples
string someString;
char* nullValue = getenv("NONEXISTENT"); // some non-existent environment variable

// bad code example 1:
char x[1024];
sprintf(x," some text%s ", nullValue); //crashes on solaris, what about linux?

// bad code example 2:
someString += nullValue; // What happens here?

//bad code example 3:
someString.append(nullValue); // What happens here?

//bad code example 4:
string nextString=string(nullValue); //What happens here?
cout<<nextString;

我们正在使用 solaris、linux、gcc、sunstudio,将来很可能会使用 clang++。此代码的行为是否跨平台和编译器一致?在上述代码的所有情况下,我找不到描述预期行为的规范。

目前,我们在使用 gcc(和 linux)运行我们的代码时遇到问题,上述代码是否可能是原因?

如果上面的代码在所有这些环境中的行为相同,那对我来说是有值(value)的信息(即使行为是崩溃),因为我知道这不是我们的 linux 问题的原因。

最佳答案

一般来说,这些使用 NULL 的地方,其中需要一个有效的 C 字符串,会导致未定义的行为,这意味着任何事情都可能发生。一些平台试图为此定义行为。 IIRC 有一些平台可以优雅地处理将 NULL 指针传递给 printf 系列函数以进行 %s 格式替换(打印类似“(null)”的内容)。除此之外,一些平台试图确保在这种情况下出现可重现的崩溃(例如致命信号)。但一般情况下您不能依赖它。

如果您在代码的那个区域有问题:是的,这是一个可能的原因或可能掩盖其他原因,所以:修复它,它坏了!

关于关于特定编译器/平台问题的 C++ null-terminated-string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com