【发布时间】:2015-04-20 06:41:10
【问题描述】:
我知道这个问题已经被问过很多次了,但我完全被卡住了。
编辑:这个问题与之前的问题不同,因为问题不在于反向函数的代码,而是可以将哪些类型的值传递给反向函数(即数组与指针).. 请参阅下面的答案了解更多信息。
我只是想反转一个 c 风格的字符串。我直接从破解编码面试中复制并粘贴了代码。 (见下文)
void reverse(char *str) {
char * end = str;
char tmp;
if (str) {
while (*end) {
++end;
}
--end;
while (str < end) {
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
}
这对我不起作用。我对 C 很陌生,所以也许我编译代码错误。我的主要功能如下:
int main(int argc, char *argv[])
{
char *string = "foobar";
reverse(string);
printf("%s\n", string);
return 0;
}
我在 Windows 8.1 中使用 Cygwin,并且在我正在运行的命令行上:
gcc ex1.c -Wall -o exe1
./exe1
每次我从窗口弹出“exe1.exe 已停止工作”时。 我尝试在 while 循环中放置一个打印语句来尝试调试并查看发生了什么。在弹出窗口出现之前,它会到达一次while循环。
编辑:阅读 cmets 后,我还尝试将 main 中的代码更改为:
char string[] = "foobar";
reverse(string);
当我这样做时,我的程序就会挂起。
我做错了什么?
谢谢!
【问题讨论】:
-
您将一个常量字符串传递给
reverse函数,然后该函数会尝试对其进行修改。这是无效的,因为常量字符串是只读的。 -
只需将
char *string = "foobar";更改为char string[] = "foobar"; -
这基本上是“只是另一个字符串反转”问题(因此我选择将其作为副本关闭)。它也可能是“只是另一个“不要修改字符串文字””的问题。无论哪种方式,这都不是一个真正的新问题。
-
我知道这并不新颖。我一开始就这么说了。无论如何,其他答案都没有帮助我弄清楚。似乎这个问题被问了很多,因为有很多事情发生(特别是对于新的编码人员,他们可能还不确定如何阅读代码和提出问题),而不是因为人们没有试图找到答案.