文字列が変換されてない?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Sirius

文字列が変換されてない?

#1

投稿記事 by Sirius » 12年前

このプログラムを見てください

コード:

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

int main(void)
{
	char str[] ="12345";

	printf("str       =\"%s\"\n", str);
	printf("atoi(str) = %d\n", atoi(str) );

	if(str[0] == 1)
		puts("数字です");
	if(str[0] == '1')
		puts("文字です");

	return 0;
}
このプログラムでは

コード:

str        ="12345"
atoi(str)  = 12345
文字です
と表示されます。なぜatoi関数で変換したにもかかわらず、
文字のままなのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 文字列が変換されてない?

#2

投稿記事 by h2so5 » 12年前

atoiは数字に変換したものを返すだけです。引数(str)の内容に変更を加えるわけではありません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列が変換されてない?

#3

投稿記事 by softya(ソフト屋) » 12年前

atoiは文字列を参照しただけで、元の文字列を変換したり、作り変えるわけではありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Sirius

Re: 文字列が変換されてない?

#4

投稿記事 by Sirius » 12年前

そうだったのですね。
atoiとはまた他の関数で それを引数に使った時には
ずっとその関数の効果が持続していたのでatoi関数の効果が持続しなかった理由がわからなかったんです。

「atoiは元の数に変更を加えるわけではない」
それで効果が持続していた関数は
「元の数に変更を加えていた」
ということなんですね

ありがとうございました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列が変換されてない?

#5

投稿記事 by softya(ソフト屋) » 12年前

そもそも型が違うのでchar型にint型は桁あふれ発生で代入できないです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
asd
記事: 319
登録日時: 15年前

Re: 文字列が変換されてない?

#6

投稿記事 by asd » 12年前

Sirius さんが書きました:そうだったのですね。
atoiとはまた他の関数で それを引数に使った時には
ずっとその関数の効果が持続していたのでatoi関数の効果が持続しなかった理由がわからなかったんです。
その他の関数が何か分かりませんが、atoi関数は以下のような宣言がなされています。

コード:

int atoi( const char *str );
引数の文字列はconst修飾子により変更されないことが保障されているので、atoi関数実行後に引数の文字列が編集されていることはありません。

引数に指定されたポインタが変更される関数の例としてぱっと浮かんだのはstrtok関数ですかね。

コード:

char *strtok(char *s1, const char *s2)
第1引数に指定された文字列を第2引数で指定されたデリミタ(区切り文字)で分解しトークンを得る関数ですが、
第1引数の文字列中のデリミタは\0に置き換えられていくので、この関数の後で元の文字列を参照しようとしてハマることがあります(汗)
オフトピック
このコメントを編集するつもりが引用返信になっていて、引用のみのコメントを新規投稿してしまったので、削除しています。
Advanced Supporting Developer
無理やりこじつけ(ぉ

閉鎖

“C言語何でも質問掲示板” へ戻る