- 论坛徽章:
- 0
|
把sco的程序移植到linux上发现了个问题,不知道怎么解决![](static/image/smiley/default/em14.gif)
程序:
- #include <stdio.h>
- void trimall(char** mystr)
- {
- char *mytmpbuf;
- int i;
- mytmpbuf=*mystr;
-
- if(strlen(mytmpbuf)==0)
- return;
- for(;(*mytmpbuf==' ')||(*mytmpbuf=='\t');mytmpbuf++);
- i=strlen(mytmpbuf);
- for(;(*(mytmpbuf+i)==' ')||(*(mytmpbuf+i)=='\n')||(*(mytmpbuf+i)=='\0');i--)
- {
- *(mytmpbuf+i)=0;
- printf("[%s]",mytmpbuf+i);
- if (i==0)
- break;
- }
- *mystr = mytmpbuf;
- }
- int StrTrim(s)
- char *s;
- {
- short i, l, r, len;
- for(len=0; s[len]; len++);
- for(l=0; (s[l]==' ' || s[l]=='\t' || s[l]=='\n'); l++);
- if(l==len)
- {
- s[0]='\0';
- return(0);
- }
- for(r=len-1; ((s[r]==' ' )|| (s[r]=='\t' )||( s[r]=='\n'));r--);
- for(i=l;i<=r;i++)
- s[i-l]=s[i];
- s[r-l+1]='\0';
- return(0);
- }
- char * FunSep(char *alParam1,short ilOrder)
- {
- StrTrim(alParam1);
- return;
- }
- int main()
- {
- char tmpbuf1[2048];
- char* tmpbuf2;
- short tmpbuf1len;
- memcpy(tmpbuf1,"tmpbuf1",7);
- tmpbuf1[7]=0;
- fprintf(stderr,"\n tmpbuf1=[%s]\n",tmpbuf1);
- [b]FunSep(tmpbuf1,1);[/b]
- fprintf(stderr,"\n tmpbuf1=[%s]\n",tmpbuf1);
- printf("aaa");
-
- return 0;
- }
复制代码
一个测试的程序,发现居然把FunSep(tmpbuf1,1);改为FunSep("tmpbuf1",1)时编译通过,但执行居然core掉了,
想了半天没明白。另外在在sco上测试是正常的,但在suse上居然core了,why,
我就用了简单的gcc -g -o编的
我用gdb跟了下,把跟踪发上去
用FunSep("tmpbuf1",1)时:
- (gdb) break 58
- Breakpoint 1 at 0x8048670: file mytest.c, line 58.
- (gdb) break 46
- Breakpoint 2 at 0x8048604: file mytest.c, line 46.
- (gdb) break 31
- Breakpoint 3 at 0x8048512: file mytest.c, line 31.
- (gdb) r
- Starting program: /home/proj/tmp/mytest
- tmpbuf1=[tmpbuf1]
- Breakpoint 1, main () at mytest.c:58
- 58 mytesttest("tmpbuf1",1);
- (gdb) n
- Breakpoint 2, mytesttest (str=0x8048842 "tmpbuf1", i=1) at mytest.c:46
- 46 StrTrim(str);
- (gdb) p str
- $1 = 0x8048842 "tmpbuf1"
- (gdb) n
- Breakpoint 3, StrTrim (s=0x8048842 "tmpbuf1") at mytest.c:31
- 31 for(l=0; (s[l]==' ' || s[l]=='\t' || s[l]=='\n'); l++);
- (gdb) n
- 32 if(l==len)
- (gdb) p s
- $2 = 0x8048842 "tmpbuf1"
- (gdb) n
- 37 for(r=len-1; ((s[r]==' ' )|| (s[r]=='\t' )||( s[r]=='\n'));r--);
- (gdb) n
- 38 for(i=l;i<=r;i++)
- (gdb) n
- 39 s[i-l]=s[i];
- (gdb) n
- Program received signal SIGSEGV, Segmentation fault.
- 0x080485c9 in StrTrim (s=0x8048842 "tmpbuf1") at mytest.c:39
- 39 s[i-l]=s[i];
- (gdb)
复制代码
用FunSep(tmpbuf1,1)时正常
- (gdb) break 58
- Breakpoint 1 at 0x8048670: file mytest.c, line 58.
- (gdb) break 46
- Breakpoint 2 at 0x8048604: file mytest.c, line 46.
- (gdb) break 31
- Breakpoint 3 at 0x8048512: file mytest.c, line 31.
- (gdb) r
- Starting program: /home/proj/tmp/mytest
- tmpbuf1=[tmpbuf1]
- Breakpoint 1, main () at mytest.c:58
- 58 FunSep(tmpbuf1,1);
- (gdb) n
- Breakpoint 2, FunSep (alParam1=0xbfffe9e0 "tmpbuf1", ilOrder=1) at mytest.c:46
- 46 StrTrim(str);
- (gdb) p str
- $1 = 0xbfffe9e0 "tmpbuf1"
- (gdb) n
- Breakpoint 3, StrTrim (s=0xbfffe9e0 "tmpbuf1") at mytest.c:31
- 31 for(l=0; (s[l]==' ' || s[l]=='\t' || s[l]=='\n'); l++);
- (gdb) n
- 32 if(l==len)
- (gdb) p s
- $2 = 0xbfffe9e0 "tmpbuf1"
- (gdb) n
- 37 for(r=len-1; ((s[r]==' ' )|| (s[r]=='\t' )||( s[r]=='\n'));r--);
- (gdb) n
- 38 for(i=l;i<=r;i++)
- (gdb) n
- 39 s[i-l]=s[i];
- (gdb) n
- 38 for(i=l;i<=r;i++)
- (gdb) n
- 39 s[i-l]=s[i];
- (gdb) n
- 38 for(i=l;i<=r;i++)
- (gdb) n
- 39 s[i-l]=s[i];
- (gdb)
复制代码
[ 本帖最后由 vveinv 于 2006-11-6 21:57 编辑 ] |
|