我正在将一些 C 代码编译为 C++ 并且遇到了一些令我困惑的事情。考虑以下取自 LuaFileSystem 的函数。
static const char *perm2string (unsigned short mode) {
static char perms[10] = "---------";
//static char* perms = "---------";
int i;
for (i=0;i<9;i++) perms[i]='-';
if (mode & _S_IREAD)
{ perms[0] = 'r'; perms[3] = 'r'; perms[6] = 'r'; }
if (mode & _S_IWRITE)
{ perms[1] = 'w'; perms[4] = 'w'; perms[7] = 'w'; }
if (mode & _S_IEXEC)
{ perms[2] = 'x'; perms[5] = 'x'; perms[8] = 'x'; }
return perms;
}
此代码将正常工作,但是如果我取消注释注释行,它会崩溃。我已经用调试器解决了这个问题,似乎static char* perms
字符串被放置在只读内存中,所以第一个循环会导致访问冲突,使用静态数组不会导致这样的问题。我很好奇为什么当字符串没有声明为 const 时会发生这种情况。