user-0 提问: 一个字符串处理程序，core dump了，请帮忙看看是哪里出问题了

回复:
user: user-0
content: 感谢各位时间，本帖将会和http://bbs.csdn.net/topics/390911755一起结贴给分 还请各位版友继续耐心关注，本人定当按时给分结贴

user: user-0
content: 引用 10 楼 u013163178 的回复:你看这代码 /*************************************************************************     > File Name: p.c     > Author: Jukay     > Mail: hellojukay@gmail.com      > Created Time: 2014年10月21日 星期二 18时07分32秒  ************************************************************************/  #include<stdio.h> int main() { 	char *p=&"Hello World"[3]; 	printf("%s\n",p);  	return 0; }   您的回答，非常重要，我已经反复试验了您的回答 另开一贴专门讨论，还请帮助看一下这个帖子： http://bbs.csdn.net/topics/390911755

user: user-1
content: do {           tmp_value = value;           value /= base;           *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];       } while ( value );   明显你就抄漏了别人的东西。既然不是自己写的，copy也要认真copy.

user: user-2
content: 你看这代码 /*************************************************************************     > File Name: p.c     > Author: Jukay     > Mail: hellojukay@gmail.com      > Created Time: 2014年10月21日 星期二 18时07分32秒  ************************************************************************/  #include<stdio.h> int main() { 	char *p=&"Hello World"[3]; 	printf("%s\n",p);  	return 0; }

user: user-0
content: 引用 8 楼 lovesmiles 的回复:[quote=引用 5 楼 cinnik 的回复:] 因为35 + (tmp_value - value * base)这个表达式越界了。  而且，while循环无法结束。   } while (value);  是的，你这是那里的代码，是不是少了什么东西？ 自己单步调试一下。[/quote]  代码源自于此： http://blog.csdn.net/zougangx/article/details/6187713 看起来是个很成熟的牛人写出来的啊

user: user-1
content: 引用 5 楼 cinnik 的回复:因为35 + (tmp_value - value * base)这个表达式越界了。  而且，while循环无法结束。   } while (value);  是的，你这是那里的代码，是不是少了什么东西？ 自己单步调试一下。

user: user-0
content: 再请问，这一行是什么意思：  *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"       [35 + (tmp_value - value * base)];   这里的中括号是什么意思？ "[ ]"??  求大神指导

user: user-0
content: http://bbs.chinaunix.net/thread-1632005-1-1.html

user: user-3
content: 因为35 + (tmp_value - value * base)这个表达式越界了。  而且，while循环无法结束。   } while (value);

user: user-3
content: #include <stdio.h> #include <stdlib.h>   char* itoa(int, char*, int);   int main(void) {   int num = 698;   char str[25];     itoa(num, str, 10);   printf("The number 'num' is %d and the string 'str' is %s. \n", num, str); }   char* itoa(int value, char* result, int base) {     char* ptr = result, *ptr1 = result, tmp_char;   int tmp_value;     //check that the base if valid   if (base < 2 || base > 36) {     *result = '\0';     return result;   }    do {     tmp_value = value;     *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"       [35 + (tmp_value - (value / base * base))];     value = tmp_value / base;   } while (value);     //apply negative sign   if (tmp_value < 0) *ptr++ = '-';   *ptr-- = '\0';     while (ptr1 < ptr)   {     tmp_char = *ptr;     *ptr-- = *ptr1;     *ptr1++ = tmp_char;   }       return result; }

user: user-0
content: 另外，您说的产生core.xxx是当进程崩溃时发生的吧？ 至于"Segmentation fault (core dumped)"，应该是程序操作了某些OS保护的区段吧？是不会产生core.xxx吧？  当前这个程序之所以发生core dump，应该是ptr最初赋值"zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz". ptr指向了只读数据区 而当再次进去do while循环后，ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" 其实是想改动这个只读数据区，所以发生了core dump。。。。 这是我的推测，请指导是否正确？

user: user-0
content: 真是感谢您的解答  再请问，这一行是什么意思：  *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"       [35 + (tmp_value - value * base)];

user: user-4
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令