0
私は、次のしている:は、関数の戻り値に改行を認識
$ cat 1.c
#include <stdio.h>
static char buf[1000];
const char*
foo(void)
{
memcpy(buf, "abc", 3);
buf[3] = '\n';
memcpy(buf+ 4, "def", 3);
buf[7] = '\n';
buf[8] = 0;
return buf;
}
int main()
{
foo();
printf("%s", buf);
return 0;
}
私はそれをコンパイル:gcc -g -O0 1.c
とGDBを起動します:gdb ./a.out
私は "の行にブレークポイントを設定printf "を実行した後、呼び出しコマンドを発行してください:
(gdb) call foo()
$4 = 0x600980 "abc\ndef\n"
改行文字が選択されていないことがわかります。
(gdb) call printf("%s", foo())
abc
def
$5 = 8
それは動作しますが、種類の面倒:
私はそれを回避するために、このトリックを使用しています。もっと簡潔な方法があるのだろうか?
ここでprintfを呼び出すのが最善の解決策である場合、gdbに "$ 5 = 8"を表示しないように指示する方法はありますか?