• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語でintをchar*に代入)

C言語でintをchar*に代入

このQ&Aのポイント
  • C言語を用いてマイコンにシリアル通信経由で値を書き込む方法を教えてください。
  • マイコンにASCIIコードでデータを送信し、受信した値をint型の配列に格納し、char型の変数に書き込む方法を教えてください。
  • int型の値をchar*に変換するための関数を作成しましたが、うまく動作しません。どのように改良すればいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

C言語久しぶりなので、分かりにくいかもしれませんが、まず解説から kWifiPass = ssid; は正しくはkWifiSsidだと思いますが、細かい事はさておきkWifiSsidがグローバル変数であると想定しますが、上記の通りの代入ではkWifiSsidにssidの先頭のアドレスを設定しているだけです。なので、実際に値が設定されているわけではない事をご理解ください。setSSID()の関数が終了すると同時にssidは消滅しますが、これによりkWifiSsidには不定値が設定されます。(gccではそうでした。) kWifiSsidに値を設定してあげるためには上記の代入式では設定出来ないので、memcpyやstrcpyなどを使用して値を設定してあげる必要がありますが、setSSID()の呼び出し元等でkWifiSsidのメモリを確保してあげる必要があります。 解説だと分かりづらいかと思いますので、以下サンプルを・・・ ※細かい仕様は気にしないで作ってます。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define SSID_LENGTH 30 char *kWifiSsid; void setSSID(int *k) { char ssid[30]; memset(ssid, 0x00, sizeof(ssid)); for(int i = 0; i < SSID_LENGTH; i++) { if(*k == 10) { break; } if(i > 1) { ssid[i - 2] = *k; } k++; } // ssidに終端文字(\0)が含まれている事を想定 strcpy(kWifiSsid, ssid); } int main(void) { // テスト用変数 int k[30] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 70, 73, 75, 77, 79 }; // SSID分のメモリを確保しておく。 kWifiSsid = (char *)malloc(SSID_LENGTH); setSSID(k); // 値が設定されているか確認 printf("%s\n", kWifiSsid); // メモリを解放 free(kWifiSsid); }

con014057
質問者

お礼

ご回答ありがとうございます. >>setSSID()の関数が終了すると同時にssidは消滅します 正に上記の現象で悩んでおりました. ポインタについての理解が乏しいですが,いただいたコードを参考にしてプログラム作成を行っていきます. ありがとうございました.

その他の回答 (2)

  • yelser
  • ベストアンサー率72% (8/11)
回答No.2

kWifiPassがグローバル変数だという前提ですが、現在の仕様ではssid(=kWifiPass)の中身は関数の終了とともに未定義となります。 memcpyなどで渡すかssidが消滅しないようにすればよいかと

con014057
質問者

お礼

ご回答ありがとうございます. ポインタに対する理解が浅いですので,おかしなコードを書いているようでした.ご指摘の内容を参考に勉強致します. 現状は取り合えずssidをグローバルな変数として定義すれば問題なく動作致しました.

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

ポインタをちゃんと理解されていますか? >kWifiPass = ssid; はssidのアドレスをkWifiPassに設定するだけですよ?

con014057
質問者

お礼

ご回答ありがとうございます. ポインタに対する理解が浅いですので,おかしなコードを書いているようでした.ご指摘の内容を参考に勉強致します.

関連するQ&A