ページ 11

C言語のint型の割り算

Posted: 2020年11月19日(木) 11:53
by Salt

コード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    int a;//数入力
    int z;
    char *b;
    char d;
    printf("数を入力\n");
    scanf("%d",&a);//①
    b = (char*)malloc(sizeof(char) * a + 1);//入力された数の文字を入力できるメモリを確保する
    printf("文字列を入力\n");
    scanf("%s",&d);
    strcpy(b,&d);
    printf("%c\n",*b);
    z= a/2;//②
    printf("%d\n",&a);//③
    printf("%d\n",&z);//④
    free(b);
    return 0;
}
このコードはあるプログラミングの一部です。配列の操作をしていて、ある操作がどうしてもうまくいかず、その原因が①で入力された数が②③④で入力された数値とは全く違う数値になっていることだと判明しました。
例えばaに5を入力したところ、③では6422036④では6422032と出力されており、③と④の差から、これはaのアドレス値が出力されているのでは?とも考えましたが、その原因がわかりません。
よろしければ、どこにミスがあるのか教えていただきたいです。私の望む形は、
③に入力された値が④にはそれを2で割った数値が(小数点以下切り捨て)出力されるというものです。

Re: C言語のint型の割り算

Posted: 2020年11月19日(木) 12:05
by Salt
すみません、③と④のところの&はついていなかったです。ですが、それでも出力される値が入力された値とは程遠いものが出力されてしまいます

Re: C言語のint型の割り算

Posted: 2020年11月19日(木) 13:41
by usao
(1)aを入力した直後の箇所にてaの値をprintfなりで確認してください.入力した値が出力されますか?
(2)文字列入力する処理は全く不要だと思うので,それ関連(変数bやdに関する記述)を一度全て取っ払ってください.
それでも出力結果は異常なままですか?
(3) (2)で出力結果が改善する場合,&dに対するscanfあたりがやらかしているのではないか? とか想像します.

Re: C言語のint型の割り算

Posted: 2020年11月19日(木) 20:38
by みけCAT

コード:

    char d;
    scanf("%s",&d);
これはダメですね。
dには1文字分の領域しか無く、それは終端のナル文字で使うため、0文字までの文字列しか入力できません。
1文字以上の文字列を入力してしまうと、範囲外への書き込みを起こし、周辺のデータの破壊に繋がります。
今回の場合、dはこのあと使われていないので、
dを経由せずに直接bが指す領域に対して文字列を入力した方がいいでしょう。

Re: C言語のint型の割り算

Posted: 2020年11月22日(日) 23:10
by box

コード:

// 変数bとdの役割がよくわからないので、削除しました

#include <stdio.h>

int main(void)
{
    int a;

    printf("数を入力\n");
    scanf("%d", &a);
    printf("%d\n", a);
    printf("%d\n", a / 2);
    return 0;
}