程序片段: -
if((fd = open(buf_serv, O_RDONLY)) < 0) {
char c[MAXLEN+1];
snprintf(c, sizeof(c), ": can't open, %s\n", strerror(errno));
n = strlen(c);
Run Code Online (Sandbox Code Playgroud)
...
gdb :-
102 if((fd = open(buf_serv, O_RDONLY)) < 0) {
(gdb) n
104 snprintf(c, sizeof(c), ": can't open, %s\n", strerror(errno));
(gdb) p sizeof(c)
$1 = 4097
(gdb) n
105 n = strlen(c);
(gdb) p strlen(c)
$2 = -1428323296
(gdb) n
...
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我strlen如何返回负数?(用sigsegv信号撞击我的程序)
在此先感谢所有人!
(gdb) l
101
102 if((fd = open(buf_serv, O_RDONLY)) < 0) {
103 char ch[MAXLEN+1];
104 write(STDOUT_FILENO, "foo", 3);
105 sprintf(ch, ": can't open, %s\n", strerror(errno));
106 n = strlen(ch);
107 write(writefd, ch, 100);
108 } else {
109 while((n = read(fd, buf_serv, MAXLEN)) > 0) {
110 write(writefd, buf_serv, n);
(gdb) p ch
$1 = ": can't open, No such file or directory\n", '\000' <repeats 4056 times>
(gdb) p strlen(ch)
$2 = -1428323296
Run Code Online (Sandbox Code Playgroud)
小智 7
只是你不能使用GDB:P
(gdb) n
105 n = strlen(c);
(gdb) p strlen(c)
Run Code Online (Sandbox Code Playgroud)
GDB显示了要执行的下一行.因此,在您打印时n,它尚未初始化.写n <enter>在打印前一个更多的时间n.
| 归档时间: |
|
| 查看次数: |
2444 次 |
| 最近记录: |