我发现了一些类似的代码(以下代码中有很多问题):
//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 上)运行我们的代码时遇到问题,上面的代码可能是原因吗?
如果上面的代码在所有这些环境中的行为都相同,那么这对我来说是有价值的信息(即使行为是崩溃),因为我会知道这不是我们的 linux 问题的原因。