検索結果 31 件

by Ohagi
6年前
フォーラム: C言語何でも質問掲示板
トピック: mallocで文字が途切れる
返信数: 2
閲覧数: 2154

Re: mallocで文字が途切れる

あまりそういう使い方はしないのですね。
返信ありがとうございました。
by Ohagi
6年前
フォーラム: C言語何でも質問掲示板
トピック: mallocで文字が途切れる
返信数: 2
閲覧数: 2154

mallocで文字が途切れる

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char *str; char temp[128]; int size; printf("array size = "); fgets(temp, sizeof(temp), stdin); size = atol(temp); str = malloc(size); printf("sizeof(str) = %d\n", (int) sizeof(str)); printf("sizeof(temp) = %d\n", (int) sizeo...
by Ohagi
6年前
フォーラム: C言語何でも質問掲示板
トピック: read()によるファイルの読み込みで失敗する
返信数: 2
閲覧数: 2401

Re: read()によるファイルの読み込みで失敗する

かずまさん、返信ありがとうございます。

戻り値の-1はエラー時に戻る値で、ファイルの終端は0バイトの0だったんですね。
慣れない英語のmanページを見ていたのでミスリードしていました。

ナル文字の疑問も教えていただいたコードを試してみると
確かにread()ではナル文字が挿入されていないことが確認できました。
read()のあとにはナル文字を追加するように意識しようと思います。

ありがとうございました。
by Ohagi
6年前
フォーラム: C言語何でも質問掲示板
トピック: read()によるファイルの読み込みで失敗する
返信数: 2
閲覧数: 2401

read()によるファイルの読み込みで失敗する

read()を使ってファイルから5バイトずつ読み込むようなサンプルプログラムを作成していたのですが ファイルの終端になっても-1を返してくれないようで悩んでいます。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, char *argv[]) { int fd; char buff[10]; if (argc < 2) { fprintf(stderr, "usage: *.exe filename\n");...
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 英単語の訳の表示が消える
返信数: 4
閲覧数: 1995

Re: 英単語の訳の表示が消える

相関関係です。
意図した表示にならず、また意図したカーソル位置になかったのでそう思い書きました。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 英単語の訳の表示が消える
返信数: 4
閲覧数: 1995

Re: 英単語の訳の表示が消える

特に変化はないようです。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 英単語の訳の表示が消える
返信数: 4
閲覧数: 1995

英単語の訳の表示が消える

端末で英単語帳を作成しています。 void read_mode(Engdata engdata[], int n) { int i; char buff[32]; for (i = 0; i < n; i++) { printf("%s %s", engdata[i].eword, engdata[i].pronun); fgets(buff, sizeof(buff), stdin); printf("%s %s %s %s", engdata[i].jword1, engdata[i].jword2, engdata[i].jword3, engdata[i].jword4); fgets...
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体にfscanf
返信数: 3
閲覧数: 3563

Re: 構造体にfscanf

解決しました。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体にfscanf
返信数: 3
閲覧数: 3563

Re: 構造体にfscanf

エラーで書き直している間にchar型からint型に変更して配列の方を書き換えるのを忘れていました。

普通のint型にしていくつかコードを試してみたら無事データを読み込めました。

お騒がせしてすみません。

回答ありがとうございました。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体にfscanf
返信数: 3
閲覧数: 3563

構造体にfscanf

typedef struct { char name[128]; int score[12]; int abs[12]; int exam[12]; } Student; int read_data(char *fname, Student *std) { FILE *fp; int i = 0; if ((fp = fopen(fname, "r")) == NULL) { printf(error:fileopen\n"); return 1; } else { while (fscanf(fp, "%[^,],%d,%d,%d ", std[i].name, std[i].score,...
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 文字配列のswap関数とマクロ関数
返信数: 5
閲覧数: 4041

Re: 文字配列のswap関数とマクロ関数

マクロは文字列(正確にはトークン列)の「コピペと引数の置換」で書かれた場所に「展開」されるが、
関数は(少なくともソースコードレベルでは)「展開」のようなことは起こらず、呼び出し元とは分離されたスコープを持つためです。
マクロの基本的な部分が頭から抜けていました。
ありがとうございます。
呼び出し元からコピーされた仮引数s1とs2の値をスワップしています。
コピーの値を変更しても、コピー元のstrの要素への影響はありません。
配列の先頭文字を渡して仮引数でシャッフルしていただけだったのですね。
改めて指摘を受けてわかったような気がします。
ありがとうございました。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 文字配列のswap関数とマクロ関数
返信数: 5
閲覧数: 4041

文字配列のswap関数とマクロ関数

文字配列のswap関数とポインタの関係がわかりません。 #define swap(type, x, y) do { type t = x; x = y; y = t; } while (0) 参考書では上のようなスワップ関数が紹介されていましたが これをマクロ関数ではなく普通の関数として書くとうまくスワップされません。 #include <stdio.h> void swap(char *s1, char *s2) { char *t = s1; s1 = s2; s2 = t; } int main(void) { char *str[2] = {"windows", "linux"}; s...
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元配列とconst修飾子
返信数: 3
閲覧数: 2887

Re: 二次元配列とconst修飾子

型の変換や修飾などの知識が甘くて完全には理解できませんしたが
C言語の仕様の問題で2次元配列のconst修飾ができないことはわかりました。

今後Cを使っていくうえで2次元配列でconstが使えない理由が気になった時
もう一度読み返させて頂こうと思います。

回答してくださった御二方、ありがとうございました。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元配列とconst修飾子
返信数: 3
閲覧数: 2887

二次元配列とconst修飾子

#include <stdio.h> print_array(const int n[10][10]) { /* n[][]の中身を表示 */ } int main(void) { int n[10][10]; print_array(n); return 0; } print_array()がint n[][]の値を変更しないことを明示するためにconstを付けて定義すると : warning: passing argument 1 of ‘print_array’ from incompatible pointer type print_array(n); と表示されます。 clコンパイ...
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: fread関数と補数表現の対処法
返信数: 6
閲覧数: 3165

Re: fread関数と補数表現の対処法

回答してくださった御二方、ありがとうございました。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: fread関数と補数表現の対処法
返信数: 6
閲覧数: 3165

Re: fread関数と補数表現の対処法

みけCATさん 返信ありがとうございます。 符号なしcharも考えたのですが負の数も扱う予定なので困っていました。 型はunsigned char型にして、こちらでフラグを設けて負の数を表現すればいけそうが気がしてきました。 型が違っても上手く動いていたので、あまり気にしていませんでしたが言われてみると変ですね。 ご指摘ありがとうございます。 YuOさん 返信ありがとうございます。 ご指摘の通りprintf("0x%02x", buffer[3])で確認していました。 バグによる想定外の動作だと勘違いしていましたが、暗黙の型変換の影響だったんですね。 型にunsigned charにして、別途...
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: fread関数と補数表現の対処法
返信数: 6
閲覧数: 3165

fread関数と補数表現の対処法

int b[][] = { {199, ・・・ }, ・・・ }; for () { fwrite(&b[i][j], sizeof(char), 1, fp)} } でバイナリとして書きだしたファイルを char buffer[4] = {0}; for () { fread(buffer, sizeof(char), 4, fp) m[i++] = buffer[0]; m[i++] = buffer[1]; m[i++] = buffer[2]; m[i++] = buffer[3]; } と読み込みたいのですが fwrite関数でバイナリとして書き込んだb [j] = 199 = 1...
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: getchar()の改行文字のクリア
返信数: 2
閲覧数: 3463

Re: getchar()の改行文字のクリア

管理人様でしょうか?
返信の方ありがとうございます。

C言語初心者でどうすればいいのかよく分かりませんでしたが
そのように改行文字を飛ばす方法があるのですね。

勉強になりました、ありがとうございます。
by Ohagi
7年前
フォーラム: C言語何でも質問掲示板
トピック: getchar()の改行文字のクリア
返信数: 2
閲覧数: 3463

getchar()の改行文字のクリア

getchar()で1文字取得する際に改行文字をどうにかしたいです。

scanf関数の方はWikipediaに詳しい記述があったのでどうにかなりましたが、getchar()関数についてはどのようにすればいいのでしょうか?

コード:

#include <stdio.h>

int main(void)
{
  int ch;
  
  while(1) {
    printf("ch = ");  ch = getchar();
    printf("ascii code = %d\n", ch);
  }

  return 0;
}
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: fread関数で2回目から意図しない処理に
返信数: 9
閲覧数: 5663

Re: fread関数で2回目から意図しない処理に

みけCATさん、とてもわかり易い回答ありがとうございます!!

読み取る要素を4にしておけば自動的に配列のポインタを操作してくれるのだろうと、勝手に思い込んでいましたがそういうわけではないのですね。

コードを記述する際にもっと型のサイズなどを意識して書いてみようと思います。

回答してくださった皆さん、ありがとうございます。
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: fread関数で2回目から意図しない処理に
返信数: 9
閲覧数: 5663

Re: fread関数で2回目から意図しない処理に

>>can110さん ご指摘ありがとうございます。 バイナリモードでの読み込みになってませんでした(汗) >>みけcatさん サンプルプログラムの提供ありがとうございます。 提供してもらったプログラムをコンパイル・実行してみたろ問題なく動作しとても参考になりました。 それを参考に自分のコードを修正して色々確認してみたところ fread関数の結果を記憶する変数をint型からchar型に変更したところ同じように意図した結果となりました。 >>一旦char型を要素とする配列に読み込んでから変換しましょう。 int型もchar型も同じ算術型の整数型でサイズ以外は大きく違いが無いようなきがするのですが ...
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: fread関数で2回目から意図しない処理に
返信数: 9
閲覧数: 5663

Re: fread関数で2回目から意図しない処理に

御二方、回答ありがとうございます。 関数の仕様も理解しているつもりで、最小コードで意図しない結果となり、自分ではお手上げだったので回答頂けると助かります。 #include <stdio.h> #include <stdlib.h> void open_bin(FILE **fp, int ac, char *av[]) { if (ac < 2) { puts("使い方:pg_name bin_name"); exit(EXIT_FAILURE); } else { if ((*fp = fopen(av[1], "r")) == NULL) { puts("ファイルが開けません。"); }...
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: fread関数で2回目から意図しない処理に
返信数: 9
閲覧数: 5663

fread関数で2回目から意図しない処理に

04 00 00 00 04 01 00 00  ・  ・  ・ というfwrite関数で書きだしたbinファイルを読みたいのですが printfのデバッグを見ると1度目は上手く読み込まれたのですが、二回目から意図しない処理になってしまいました。 今回以外にもfread関数を使っていて意図しない処理になってしまうことがあるので困っています。 1回目は正常に読み込まれるのに二回目からおかしくなるのはどうして? 回答していただけると助かります。 /* デバッグ結果 */ main:tmp[0] = 4 main:tmp[1] = 0 main:tmp[2] = 0 main:tmp[3] = 0 ...
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: バグで動作が停止したPGを再コンパイルできない
返信数: 2
閲覧数: 1924

バグで動作が停止したPGを再コンパイルできない

Windowsのコマンドライン環境でC言語プログラムを学習しています。

プログラムの論理エラーなどで強制終了したプログラムが

実行状態の扱いになっているため?か

コンパイルで上書きが出来ません。

(LINK : fatal error LNK1104: cannot open file 'sample03.exe')

ファイルブラウザで削除もできません。

今はファイルをコピーして対処していますがデバッグの度にファイルをコピーしなければならず大変です。

何かいい対処方法はないのでしょうか?
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列e番目の要素のポインタを返す関数
返信数: 5
閲覧数: 3008

Re: 文字列e番目の要素のポインタを返す関数

あまり気にしなくていい警告なんですね。

回答してくださった御二方、ありがとうございました!!
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列e番目の要素のポインタを返す関数
返信数: 5
閲覧数: 3008

Re: 文字列e番目の要素のポインタを返す関数

回答ありがとうございます! デバッグ用コードとても見やすくて助かります。 記述してもらったコードを試したところ、検索文字のポインタが表示されました! 本当にありがとうございます。 ひとつ気になることがあってclとgccの双方でコンパイルの際に cl.exe warning C4090: 'return': different 'const' qualifiers gcc.exe In function 'str_chr': 23:3: warning: return discards 'const' qualifier from pointer target type return (s-1)...
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: 文字列e番目の要素のポインタを返す関数
返信数: 5
閲覧数: 3008

文字列e番目の要素のポインタを返す関数

参考書の演習問題で "文字列sの中に文字cが含まれていればその文字へのポインタを返す変数を作成せよ。(添字演算子を用いずに実現すること。)必須関数:char *str_chr(const *s, int c) { /* */}" というものが、サンプル回答もなく困っています。 #include <stdio.h> char *str_chr(const char *s, int c) { while (*s) if (*s++ == c) break; return s; /* warning C4090: 'return': different 'const' qualifiers */ }...
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: Scanf関数と文字列配列
返信数: 2
閲覧数: 1838

Re: Scanf関数と文字列配列

無事理解することができました。

回答ありがとうございました!
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: Scanf関数と文字列配列
返信数: 2
閲覧数: 1838

Scanf関数と文字列配列

int main(void) { char str[128]; char c; puts("入力された文字列str[128]内の文字cが含まれている個数を調べます。"); printf("str = "); scanf("%[^\n]%*c", str); printf("debug: str = %s\n", str); printf("c = "); scanf("%[^\n]%*c", &c); printf("debug: c = %c\n", c); printf("debgu: str = %s\n", str); /*--- 結果(始) ---*/ str = hellowor...
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: コマンドプロンプトでUTF-8
返信数: 3
閲覧数: 3201

Re: コマンドプロンプトでUTF-8

YuOさんの回答にあったコマンドラインのオプションを用いるというもので

無事utf-8のCソースを文字化け無しでコンパイル、実行することができました!

Bullさんの方法はネット上に記載があったので試したのですが

やはりコードページ65001に直すとフォントは強制変更&日本語フォント設定不可能になります。

WIndows8.1で仕様が変わったのでしょうか?

回答してくださった御二方、ありがとうございました。
by Ohagi
8年前
フォーラム: C言語何でも質問掲示板
トピック: コマンドプロンプトでUTF-8
返信数: 3
閲覧数: 3201

コマンドプロンプトでUTF-8

Visual Stduioの「開発コマンドプロンプト for VS2015」を使ってC言語をコンパイル、実行しています。 C言語のソースファイルは互換性のためUTF-8で記述しているのですが、コマンドプロンプトで文字化けしてしまいます。 コマンドプロンプトのデフォルト文字コードがshift_jisということで、chcp65001でutf-8に設定してみましたが なぜかchcp65001をするとフォントに日本語対応フォントがないため、文字コードを変更しても日本語がうまく表示できません。 オリジナルのゲームやソフトを作っているわけではなく、参考書のサンプルプログラムを何個も作っている状況なのでプロ...

詳細検索ページへ移動する