Objective c 我的C字符串反转函数的语法行为
我只是个业余程序员。。。 在两年多前的第二次阅读kochan的“Objective-C编程”时,现在是第六版,达到了指针章节,我试图恢复我开始使用C编程的旧时光。。。 所以,我试着编写一个反向C字符串函数,使用字符指针。。。 最后我得到了想要的结果,但是。。。还有一个非常奇怪的行为,我无法用我的编程经验来解释 首先是守则: 这是一个.m文件Objective c 我的C字符串反转函数的语法行为,objective-c,c,c-strings,Objective C,C,C Strings,我只是个业余程序员。。。 在两年多前的第二次阅读kochan的“Objective-C编程”时,现在是第六版,达到了指针章节,我试图恢复我开始使用C编程的旧时光。。。 所以,我试着编写一个反向C字符串函数,使用字符指针。。。 最后我得到了想要的结果,但是。。。还有一个非常奇怪的行为,我无法用我的编程经验来解释 首先是守则: 这是一个.m文件 #import <Foundation/Foundation.h> #import "*pathToFolder*/NSPrint.m" in
#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;
}
#导入
#导入“*pathToFolder*/NSPrint.m”
int main(int argc,char const*argv[]
{
@自动释放池
{
char*reverseString(char*str);
char*ch;
如果(argc<2)
{
NSPrint(@“命令行中没有键入单词!”);
返回1;
}
NSPrint(@“反转参数:”);
for(int i=1;argv[i];i++)
{
ch=反向限制(argv[i]);
printf(“%s\n”,ch);
//NSPrint(@“%s-%s”,argv[i],ch);
}
}
返回0;
}
char*reverseString(char*str)
{
int size=0;
对于(;*(str+size)!='\0';size++);
//printf(“大小:%i\n”,大小);
字符结果[大小+1];
int i=0;
对于(大小--;大小>=0;大小--,i++)
{
结果[i]=*(str+大小);
//printf(“%c,%c\n”,结果[i],*(str+size));
}
结果[i]='\0';
//printf(“结果位置:%lu\n”,结果);
//printf(“%s\n”,结果);
返回结果;
}
第二,请注意:
这段代码是在MacBook Pro中编译的,使用MacOS X Maverick,使用CLANG(CLANG-fobjc arc$file\u name-o$file\u name\u base)
NSPrint只是printf的一个包装器,用于打印由stringWithFormat:arguments:
第三,奇怪的行为:
如果我取消对所有已注释的printf声明的注释,则一切正常,即所有printf函数都会打印它们必须打印的内容,包括main函数中的最后一个printf
如果我取消注释那些注释printf函数中的一个,并且只是随机选择的一个,那么一切都正常工作,我得到了正确的printf结果,包括main函数中的最后一个printf
如果我保留所有已注释的printf函数的原样,我只得到main块中最后一个printf的空行,并且传递的每个参数都有一条黑行
最糟糕的是,如果我在main中使用NSPrint函数,而不是printf函数,我会得到想要的结果:
有人能给我们介绍一下吗:)您返回的是一个本地数组,该数组在函数退出时超出了范围。取消对该内存的引用会导致未定义的行为。您返回的是一个本地数组,该数组在函数退出时超出范围。取消对该内存的引用会导致未定义的行为。您正在返回一个指向所调用函数的局部变量的指针。当该函数返回时,局部变量的内存变为无效,返回的指针是垃圾 您正在返回指向所调用函数的局部变量的指针。当该函数返回时,局部变量的内存变为无效,返回的指针是垃圾 @Sérgio Paulo你唯一的问题“有人能给这里带来一些光吗?”在这里得到了很好的回答。如果你想问更多的问题,请将其添加到你的帖子中或形成一个新的帖子。@Sérgio Paulo你唯一的问题“有人能给这里带来一些光吗?”在这里得到了很好的回答。如果你想问更多的问题,可以将其添加到你的帖子中,或者形成一个新帖子。