strtol関数をmalloc()関数を使用して次のソースプログラムを修正しなさいを言われました。
どなたか詳しい方よろしくお願いします。
#include <limits.h>
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
int _space_sign(const char *s, const char **endptr);
int _space_sign(const char *s, const char **endptr)
{
int sign ;
while (isspace((unsigned char)*s))
++s;
sign = 0;
switch (*s)
{
case '-':
sign = -1;
// fall through
case '+':
++s;
break;
}
*endptr = s;
return sign;
}
long int strtolong(const char * s, char ** endptr, int base)
{
int c;
int sign = _space_sign(s, (const char**)&s);
long result;
if (s[0] == '0')
{
++s;
if ((s[1] | 0x20) == 'x')
{
if (base == 0 || base == 16)
{
++s;
base = 16;
}
}
else if (base == 0)
base = 8;
}
else if (base == 0)
base = 10;
result = 0;
for (; c = tolower((unsigned char)*s), isdigit(c) || ('a' <= c && c <= 'v'); s++)
{
int d ;
if( isdigit(c) )
d= c - '0' ;
else d = c - 'a' + 10;
if (d >= base)
break;
if (result > (LONG_MAX - d - sign) / base)
{
errno = ERANGE;
result = sign ? LONG_MIN : LONG_MAX;
}
else
{
result = result * base + d;
}
}
if (endptr != NULL)
*endptr = (char*)s;
if (sign != 0)
result = -result;
return result;
}
int main(void)
{
char s[128], *e;
long n;
int base;
printf("何進数で変換しますか。");
scanf("%d", &base);
printf("変換する数値を入力してください。");
scanf("%s", s);
n = strtolong(s, &e, base);
if (errno != ERANGE) {
printf("変換数値=%ld\n", n);
if (*e != '\0') {
printf("変換不可能部分=%s\n", e);
printf("%d文字目の\'%c\'が変換不可\n", e-s+1, *e);
}
}
else if (n == LONG_MAX)
printf("long値で表現できる値を上回りました。\n");
else if (n == LONG_MIN)
printf("long値で表現できる値を下回りました。\n");
return 0;
}
No.2
- 回答日時:
何のためにmallocを利用するのか理解に苦しむ。
ASCI相当のstrtolならmallocは必要としない。
なぜmallocを使用する必要があるのか理解しているのだろうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
干支のプログラム
-
TCP/IP通信型大文字・小文字変...
-
c++ 文字列を入力して、一文字...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
Visual Studio strcpyについて
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
int main()の・・・
-
double型の値をchar配列に変換...
-
switch文で文字を比較すること...
-
DPマッチング
-
int型からchar型への変換
-
文字列から空白を取り除きたい...
-
バイナリファイルをコピーする...
-
c言語でユーザ関数を利用して入...
-
C言語のポインターで詰まっている
-
C++ の FileCopy の設定が解り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報