![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは。
C++をVS2005でやっています。
atoi関数を使っているんですが、10個の配列strにstrncpyをやると値がおかしくなります。
10個目に'\0'を代入させてやってみても駄目でした。 以下にソースを載せます。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main( void )
{
char string[256];
char str[10];
char *moji = "12345464";
int l;
// using template versions of strcpy_s and strcat_s:
strcpy(string, "6877897898");
strcat(string, "strcpy_s");
strcat(string, "and");
// of course we can supply the size explicitly if we want to:
strcat(string, "strcat_s!");
strncpy(str, string, 10);
l = strtol(str,NULL,10);// 値が違う 6877897898にならない
printf("str = %d\n", l);
l = atoi(moji);
printf("moji = %d\n", l);
l = atoi(string);// 値が違う
printf("string = %d\n", l);
printf("String = %s\n", string);
getchar();
return 0;
}
表示結果
str = 2147483647
moji = 12345464
string = 2147483647
String = 6877897898
mojiは正常に動作しますから、ナル文字が原因なのかと思ってしまいますが。原因がいまいち分かりません。 よろしくお願いします。
No.1ベストアンサー
- 回答日時:
> strncpy(str, string, 10);
> l = strtol(str,NULL,10);// 値が違う 6877897898にならない
ここで'\0'の問題があるのはおわかりでしょう。
あとは、intの範囲です。
VS2005であれば、intは32bitのはずなので、表現できる範囲は-2147483648~2147483647となります。10桁の整数すべてを表現するには十分ではありません。
確かにそうです。
問題が解決しました。
atoi関数の返値がint型なので32bit 2147483648~2147483647は無理ですね。
指摘したとおりにしましたら動作しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# char string[100]; int c, i=0; while( (c=getchar()) 2 2022/05/30 21:41
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マルチスレッドで同時にFTPアッ...
-
C# ListBoxのアイテムをユーザ...
-
「指定されたキャストは有効で...
-
ダブルクォーテーションのrepla...
-
javaで質問です。 文字列2023/2...
-
JSPやサーブレットでSystem.out...
-
変数を動的に利用するには?
-
C言語のポインターに関する警告
-
パソコンキーボードで時分秒を...
-
ORA-01858: 数値を指定する箇所...
-
System.err. printlnとSystem.o...
-
大量のデータを読み込んで表示...
-
eclipseに記述したjavaファイル...
-
カタカナの小文字を大文字に変...
-
System.out.printlnの出力先
-
Path型をString型へ変換する(Java)
-
[JAVA]try 内の変数を外で!?
-
ループ処理の際、最後だけ","を...
-
flush()とclose()について
-
オブジェクトの中のプロパティ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
strcmp関数などでの複数の文字...
-
【Java8以降】csvファイルの複...
-
C#での関数テーブルの作り方
-
C#でIPアドレスの取得について
-
「指定されたキャストは有効で...
-
マルチスレッドで同時にFTPアッ...
-
C# JSONについて
-
Delphiで改行文字の置換がうま...
-
C#でプロパティを使わずXMLにデ...
-
C++におけるポインターと変数の...
-
jap実行時のTomcatのエラーに困...
-
C# で、あるフォルダー内にある...
-
決まった拡張子のファイルだけ...
-
strtokでの空文字への置き換え
-
c言語
-
javascript初心者
-
python文字列置換について。
-
strncpy後のatoiがおかしい
おすすめ情報