「電卓の追加」に問題があります。Valgrind はメモリ エラーもコンパイラからのエラーも報告しませんが、プログラムは printf にもかかわらず出力を表示しません - "Base is ".
すべてのポインターと変数は (n 私の意見では) 正しく初期化されています。
getnum
char *
関数は数値を取得し、 char -へ
のポインターを返します。add
関数は 2 つの数値を文字列として処理します。これは char ( )へreturn
のポインターでもあります。result
char *
問題がメモリの割り当てなのか、配列の処理に接続されたプロシージャなのかはわかりません...
コードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAX(A,B) ((A)>(B) ? (A) : (B))
char *getnum(FILE *infile, int base)
{
int len = 10;
int c;
int pos = 0;
char *num = NULL;
char *tmpnum = NULL;
num = malloc(sizeof(char)*len);
while (((c = fgetc(infile)) != EOF) && (isalnum(c))) {
if (isdigit(c)) {
/* irrelevant*/
}
else if (isalpha(c)) {
fprintf(stderr, "Wrong base, expected 16\n");
free(num);
return NULL;
}
if (pos >= len) {
/*realloc*/
}
}
return num;
}
int main(int argc, char **argv)
{
FILE *infile = NULL;
char *number1 = NULL;
char *number2 = NULL;
char *result = NULL;
int base, i, j = 0, length, count = 0;
infile = fopen(argv[1], "r");
base = atoi(argv[2]);
while (!feof(infile)) {
number1 = getnum(infile, base);
number2 = getnum(infile, base);
break;
}
printf("Base is %d\n", base);
result = add(number1, number2, base);
length = strlen(result);
for (i = 0; i <= length - 1; i++) {
if (result[i] == '0') {
count++;
}
}
for (j = i; j == (length - 1); j++) {
printf("Result is: %s\n", &result[j]);
break;
}
free(result);
result = NULL;
fclose(infile);
return 0;
}
過去4時間、それを解決しようとしていて、間違いを見つけることができません. 前もって感謝します!