当您使用以下标志进行编译时,如果添加/ GF-或删除opimization标志,它们不会崩溃,下面的代码在VS 2010中崩溃。崩溃发生在汇编代码翻译'if(path [i] =='/')'。我喜欢理解编译器在这里做的优化,并导致崩溃。期待一些提示。VS2010 C代码 - 字符串池
-Karthik
cl.exe /MD /O2 test.c
//
TEST.C
#include <stdio.h>
#include <string.h>
void testpath(char* path, int bufsiz)
{
int i;
printf("%p\n", path);
for(i=0; i < strlen(path); i++) {
if(path[i] == '/') {
path[i] = '\\';
}
}
}
int main()
{
const char* path = "testexport.prj";
char *path1 = "testexport.prj";
printf("%p\n", path);
printf("%p\n", path1);
testpath(path, 1024);
}
你说这崩溃了。有没有额外的信息说明它为什么崩溃?你展示的代码不应该有任何问题。正如你所说,条件应该阻止执行任务,因为在传递给函数的'path'中没有''/''字符。你确定你在这里展示的代码是你正在运行的代码的精确副本吗? – 2016-03-03 20:17:00