• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メモリに格納される文字列のバイト数とnullのことで)

メモリに格納される文字列のバイト数とnullのことでICカードへアクセスするPC/SC関数に関する疑問

このQ&Aのポイント
  • ICカードへのアクセスに関わるPC/SC関数であるSCardGetCardTypeProviderNameの動作について、特にchProviderとszProviderの値について疑問があります。
  • SCardGetCardTypeProviderName関数を実行すると、変数szProviderに格納されている文字列のバイト数が変数chProviderに格納されるはずですが、実際にはchProviderには15が格納されているのに、szProviderはnullのままです。
  • なぜszProviderがnullのままなのに、chProviderには値が格納されているのでしょうか?解決方法を教えてください。

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

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

> LPTSTR szProvider = NULL; > という宣言をしてます。ポインタ宣言ですが、これがおかしいですかね? たぶんおかしい。ここに答えが格納されるんだろうと思います。確認してください。 もしそうなら、答えの格納十分な領域を用意し、zProviderがそこを指すように。

zerosix
質問者

お礼

領域が十分に確保されていなかったのが原因のようです。 mallocでszProviderのメモリを確保したらうまくいきました。 どうもありがとうございました。

その他の回答 (1)

回答No.1

szProvider の'型'は何ですか? 察するに szProvider が示す領域に何らかの 情報が書き込まれるようですが、szProviderは 十分な大きさの領域を指していますか?

zerosix
質問者

補足

お返事ありがとうございます。 LPTSTR szProvider = NULL; という宣言をしてます。ポインタ宣言ですが、これがおかしいですかね? MSDNには、 LONG SCardGetCardTypeProviderName( IN SCARDCONTEXT hContext, IN LPCTSTR szCardName, IN DWORD dwProviderId, OUT LPTSTR szProvider, IN OUT LPDWORD pcchProvider ); というヘルプがあるので、szProviderをLPTSTR 型で 切ったんですが。

関連するQ&A