質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2885閲覧

int型やdouble型の数値、文字列を1文字ずつ配列に格納する方法

roatt

総合スコア45

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/09/01 08:39

前提・実現したいこと

int型・double型の数値や文字列を任意の順番でchar型の配列に1字ずつ格納を行いたいです。
例:double num = 122.7 int num2 -1の場合、
char型の配列にはa/1/2/2/./7/b/-/1/z
double num = 12.7 int num2 1の場合、
char型の配列にはa/1/2/./7/b/1/z
※[0]に"a"、numの数値の後に"b"、num2の数値の後に"z"を格納するという順番も絶対です。

発生している問題・エラーメッセージ

segmentation fault(core dumped)が出てしまいます。
(double型やint型からの変換ではなく、直接char* tmpStr = "122.7";やchar* tmpStr2 = "-1";であれば1字ずつ配列に格納できることは確認済みです。そのため、doubleやintをchar*に変換すればよいと安易に考えたのですが、間違っているのでしょうか?)

C

1#include <stdio.h> 2 3int main(void) { 4 5 char num_str[9]; 6 double num1 = 122.7; 7 char change; 8 char change2; 9 char* tmpStr; 10 char* tmpStr2; 11 int num2 = -1; 12 int count = 0; 13 14 num_str[0] = 'a'; 15 16 change = (char)num1; 17 char* str = (char*)&change; 18 19 tmpStr = str; 20 while(*tmpStr != '\0'){ 21 num_str[count+1] = *tmpStr; 22 tmpStr++; 23 count++; 24 } 25 26 num_str[count+1] = 'b'; 27 28 change2 = (char)num2; 29 char* str2 = (char*)&change2; 30 31 tmpStr2 = str2; 32 while(*tmpStr2 != '\0'){ 33 num_str[count+2] = *tmpStr2; 34 tmpStr2++; 35 count++; 36 } 37 38 num_str[count+2] = 'z'; 39 40 for(count = 0;count <= 9; count++){ //配列格納の確認用 41 printf("num_str[%d] = %c\n",count,num_str[count]); 42 } 43 44return 0; 45}

補足情報(FW/ツールのバージョンなど)

ポインタはまだまだ理解不足の点も多いため、お手数ですが丁寧に教えていただけますと大変ありがたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そのため、doubleやintをchar*に変換すればよいと安易に考えたのですが、間違っているのでしょうか?

はい、無理やりキャストした場合、その位置のメモリを指すポインタとして解釈されることになり、文字列としての値が取れるわけではありません。

sprintfを使いましょう。

c

1// 十分な長さを用意する 2char buffer[200]; 3sprintf(buffer, "a%fb%dz", num1, num2);

投稿2021/09/01 08:42

maisumakun

総合スコア145208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PingHermit

2021/09/01 09:14

%f だと余計な 0 が出てくるので、%g くらいじゃないでしょうか
roatt

2021/09/01 10:09

ありがとうございました!! 完成できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問