|
|
- #include <stdio.h>
- #include <sys/time.h>
- #define LB_SIZE 1024
- int main(int argc, char* argv[])
- {
- char* lineBuf;
- FILE* procFile = fopen( "/proc/sys/kernel/hostname", "r" );
- fgets( lineBuf, LB_SIZE+1, procFile );
- printf( "Machine hostname: %s", lineBuf );
- fclose( procFile );
- }
复制代码
我以为会发生段错误,运行后却没有发生。
gdb结果:
- Breakpoint 1, main (argc=1, argv=0xbfffdf74) at prj1.c:10
- 10 fgets( lineBuf, LB_SIZE+1, procFile );
- (gdb) p /x lineBuf
- $3 = 0xbfffdf74
- (gdb) p /c *lineBuf
- $4 = 67 'C'
- (gdb) p /c *(lineBuf+1)
- $5 = -8 '?
- (gdb) p /c *(lineBuf+2)
- $6 = -1 '?'
复制代码
执行fgets( lineBuf, LB_SIZE+1, procFile ); 后
- (gdb) n
- 11 printf( "Machine hostname: %s", lineBuf );
- (gdb) p /x lineBuf
- $7 = 0xbfffdf74
- (gdb) p /c *lineBuf
- $8 = 99 'c'
- (gdb) p /c *(lineBuf+1)
- $9 = 104 'h'
- (gdb) p /c *(lineBuf+2)
- $10 = 111 'o'
- (gdb)
复制代码
lineBuf的值没有改变,可是它所指向的地址的值却按fgets改变了,仿佛执行了隐含的malloc.
GNU/Linux kernel 2.4, gcc 3.2 |
|