gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:08 26 4
gpt4 key购买 nike

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

首先是代码:

这是一个.m文件,

#import <Foundation/Foundation.h>
#import "*pathToFolder*/NSPrint.m"

int main(int argc, char const *argv[])
{
@autoreleasepool
{
char * reverseString(char * str);
char *ch;

if (argc < 2)
{
NSPrint(@"No word typed in the command line!");
return 1;
}

NSPrint(@"Reversing arguments:");

for (int i = 1; argv[i]; i++)
{
ch = reverseString(argv[i]);
printf("%s\n", ch);
//NSPrint(@"%s - %s", argv[i], ch);
}
}

return 0;
}

char * reverseString(char * str)
{
int size = 0;

for ( ; *(str + size) != '\0'; size++) ;

//printf("Size: %i\n", size);

char result[size + 1];
int i = 0;

for (size-- ; size >= 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/p>

第三个奇怪的行为:

如果我取消注释所有那些被注释的 printf 声明,一切都会正常工作,即所有 printf 函数打印它们必须打印的内容,包括最后一个 printf ma​​in 函数中。

如果我取消注释一个,并且只随机选择一个,这些注释 printf 函数,再次一切正常,我得到了正确的 printf 结果,包括ma​​in 函数中的最后一个 printf

如果我将所有那些注释的 printf 函数保持原样,我只有空白行,而 ma​​in 中的最后一个 printf block ,每个参数传递一条黑线...

最糟糕的是,如果我在 ma​​in 中使用 NSPrint 函数,而不是 printf 函数,我会得到想要的结果:!

任何人都可以在这里带来一些光:)

最佳答案

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

关于objective-c - 我的 C 字符串反向函数的 Stange 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25603908/

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