我的C字符串反向函数的Stange行为

我只是一个业余程序员……当第二次阅读,相隔超过两年时,kochan的“Objective-C编程”,现在是第6版,到达指针章节我试图重振过去我开始使用C语言编程…所以,我尝试编写一个反向C字符串函数,使用char指针…最后我得到了所需的结果,但是…也有一个非常奇怪的行为,我用我的小编程经验无法解释……

首先是代码:

这是一个.m文件,

#import  #import "*pathToFolder*/NSPrint.m" int main(int argc, char const *argv[]) { @autoreleasepool { char * reverseString(char * str); char *ch; if (argc = 0; size--, i++) { result[i] = *(str + size); //printf("%c, %c\n", result[i], *(str + size)); } result[i] = '\0'; //printf("result location: %lu\n", result); //printf("%s\n", result); return result; } 

第二个注意事项:

此代码在MacBook Pro中编译,使用MAC OS X Maverick,使用CLANG (clang -fobjc-arc $ file_name -o $ file_name_base)

NSPrint只是printf的一个包装器,用于打印使用stringWithFormat:arguments构造的NSString

第三个奇怪的行为:

如果我取消注释所有这些注释的printf声明,一切正常,即所有printf函数打印他们必须打印的内容,包括main函数中的最后一个printf

如果我取消注释那些注释printf函数中的一个,只是一个,随机选择,那么一切都工作得很好,我得到了正确的printf结果,包括main函数中的最后一个printf

如果我按原样保留所有这些注释的printf函数, 我只使用块中最后一个printf的 BLANK LINES ,并且每个参数传递一条黑线…

最糟糕的是,如果我在main中使用NSPrint函数而不是printf函数 ,我会得到所需的结果:!

请有人带点光明:)

您将返回一个本地数组,该函数在函数退出时超出范围。 取消引用该内存会导致未定义的行为。

您正在返回一个指向被调用函数的局部变量的指针。 当该函数返回时,局部变量的内存变为无效,返回的指针是垃圾。