前提・実現したいこと
バッファに文字列を格納するプログラムをCで書きました。
以下にそのプログラムを示します。
#include <stdio.h> #define BUFSIZE 24 struct buffer { char store[BUFSIZE]; int head , tail; }; int put_str(struct buffer *buf, char *str) { int i = buf->tail; while (i - buf->head < BUFSIZE) { buf->store[i++ % BUFSIZE] = *str; if (*str == '\0') { buf->tail = i; return 1; } else { str++; } } return 0; } int get_str(struct buffer *buf, char *dest) { int i = buf->head; if (i == buf->tail/BUFSIZE ) return 0; do { *dest = buf->store[i] ; } while ( buf->store[i++] != '\0'); buf->head = i; return 1; } int main() { struct buffer buf; char dest; int i; buf.head = buf.tail = 0; for(i = 0; i < BUFSIZE; i++) buf.store[i] = '\0'; put_str(&buf, "ten"); put_str(&buf, "six"); put_str(&buf, "three"); put_str(&buf, "four"); get_str(&buf, &dest); while(dest != '\0') printf("%c", dest++); puts(""); return 0; }
格納文字列はバッファ領域を超えないとします。
発生している問題
main関数内で文字列を表示させようと試みたところ、上手くいきませんでした。
コンパイルし実行することはできたのですが、何も表示されませんでした。
おそらくmain関数内だけを変更すれば上手くいくと思います。
get_str関数に与える二つ目の引数と、main関数内のprintfに問題がありそうな気がするのですが、どうでしょうか。
get_strの二つ目の引数としてchar型の配列の先頭アドレスを渡してみたり、char型のポインタを渡してみたりしたのですが、上手くいきませんでした。
どのように改善すればよいでしょうか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/20 12:16
2019/06/20 12:16
2019/06/20 12:38
2019/06/20 13:46
2019/06/21 01:33
2019/06/21 09:53