問題タブ [char-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
130 参照

c - C は Re: Void および文字型へのポインター、型キャストを保証します

C 仕様 (主に C99) を最善を尽くして読むと、void *これらの型のいずれかの間でキャスト (または の暗黙的な変換動作が適用される場合は暗黙的に変換) が有効であると考えられます。

void *char *signed char *unsigned char *

これにより未定義の動作がトリガーされず、それらのポインターが同じ基本表現を持つことが保証されることを期待しています。

したがって、合法的に逆参照、型キャスト、および/またはそれを3つのchar型ポインターの1つに割り当てることができるアドレスをすでに指しているこれら4つの型のいずれかのポインターを取得し、それを逆参照してアクセスすることが可能でなければなりません唯一の違いは、コードがその場所のデータをcharsigned char、またはとして扱うかどうかunsigned charです。

これは正しいです?これが真実ではないC標準のバージョンはありますか(標準void *化前のCの型の欠如は耐えられません)?

PSこの質問は、他の多くの質問を渡すことで断片的に回答されていると思いますが、これが明示的に述べられている/確認されている単一の明確な回答を見たことはありません.

0 投票する
1 に答える
93 参照

c++ - char ポインターの配列の出力

ポインターの配列を使用してファイルから 2 行を読み取ろうとしています。ただし、画面に何も表示されません。オンラインで検索してみましたが、問題を解決できませんでした。Mac で Netbeans を使用して記述したコードを次に示します。

0 投票する
2 に答える
83 参照

c - リンクリスト内のchar、char*の違い

int 型と char 型のデータを保持するリンク リストを作成しました。関数はデータをリストに追加し、もう一方はそれを出力します。int 型のみを印刷すると問題は発生しませんが、char 型も印刷しようとするとプログラムがクラッシュします。

したがって、印刷関数 print_list() で char* を定義する方法を実行する必要があります。

より具体的には、私の問題はここにあります print_list() :

したがって、私の実際のコードは次のとおりです(エラーと警告は0ですが、プログラムはクラッシュします):

0 投票する
1 に答える
1504 参照

c++ - char* を GetModuleHandle 関数に渡す方法は?

「somefile.exe」のような文字列に基づいてモジュール情報を取得しようとしています。

タイプ "char *"のエラー引数は、タイプ "LPCWSTR" のパラメーターと互換性がありませんが、GetModuleHandle に表示されます。

今、私は次のような多くのステップを試しました:

  1. プロジェクト プロパティ → 構成プロパティ → 文字セット に移動し、Unicode ではなくマルチバイト文字セットを使用するように設定します。私はそれが他の人を助けるのを見てきましたが、私にとってはうまくいきませんでした.

  2. のように szModule をキャストし(LPCWSTR)szModuleます。これにより、プログラムは正常にビルドされましたが、意図したとおりには機能しませんでした。

  3. パラメータを static に置き換えてユニコードを使用しますL"somefile.exe"。これは完全に機能しましたが、言うまでもなく、あまり実用的ではありません。

私の質問は:タイプが のGetModuleHandle(szModule)場合、どうすればコンパイルできますか?szModulechar*

何か役立つ場合は、Visual Studio 2015 を使用しています。

0 投票する
1 に答える
496 参照

c - C# から受け取った File byte[] 配列を C dll のファイルに書き込みます

「Test」という単語を含む単純な PDF ドキュメントを作成し、C# コンソール アプリケーションでバイト ストリームを作成しました。

buff = File.ReadAllBytes(<Path of File>);

ファイルのサイズは約 9,651 バイトです。ファイルのバイト配列とバイト配列の長さを引数として受け取る関数をエクスポートする Win32 C dll も作成し、これを使用して C# で宣言しました。

[DllImport("<path to dll>", CallingConvention = CallingConvention.Cdecl)] public static extern int file_data(byte[] byteArray, int length);

C dll のメソッドは、次のようにエクスポートされます。

#define FILEDATA_API __declspec(dllexport) FILEDATA_API int file_data(char *byteArray, int size);

次に呼び出しret = file_data(buff, buff.length)ました。Cコードでは、次のように、一時ファイルに直接受け取った文字ポインターを1文字ずつ記述しました。

しかし、ここで問題が発生します。バイト配列を 1 文字ずつファイルにダンプする C コードは、9,755 バイトのサイズのファイルを生成します。内部のコンテンツのほとんどは正しいように見えますが、いくつかの新しい行が導入されていることを除いて (私の知る限り、いくつかの追加データである可能性があります)、PDF ファイルが破損し、このダンプされたバージョンが Adob​​e で開かれません。 . 誰かが私が間違っているかもしれない場所についていくつかの指針を提供してもらえますか? %s in fprintPDF のバイト配列の一部の組み合わせにより、C で null で終了する文字列が生成され、予想よりも少ないデータがダンプされるため、使用できません。

ありがとう。

アップデート:

  1. 望ましい動作は、ファイル バイト配列が C# から受信され、C コードを使用してファイルに書き込まれたときに、ファイルが Adob​​e で正常に開かれるようにすることです。
  2. 問題に存在するコードは、誰かが単にファイルへの char ポインタを書き出す win32 dll を生成するのに十分なはずですが、さらに詳細をいくつか追加しました。
0 投票する
0 に答える
413 参照

c++ - テンプレート関数 C++ Sqlite3 ラッパー

データベースのC++ラッパーを作成中。Sqlite3以下は、(連携して)std::vectorにクエリの結果を格納する 2 つの関数です。テンプレートを作成する前は、どちらも成功していました。宣言の引数であるchar*[]に対してコンパイル エラー (VS では C2664) が発生します。char**Sqlite3

私は十分な知識を持っていませんがC、私が収集したものから、関数の引数として渡された配列はポインタとして書き換えられ、結果は右辺値ですが、変換後に同等になりますchar*[]char**ただし、それにはvectorconst 参照である必要があり、結果を入力するという目標を無効にします。

成功したクエリで正しくコンパイルするには、これをどのように変更できますか? 他のアドバイスや修正は大歓迎です。前もって感謝します。

編集:

に変更char *argv[], char *names[]char **argv, char **namesても効果はありません。同じエラーをスローします:「引数3をからint (__cdecl *)(void *,int,char **,char **)に変換できませんint (__cdecl *)(void *,int,char **,char **)」。

0 投票する
1 に答える
70 参照

c - char ポインタを固定文字列に追加しようとしているときにメモリ例外が発生しました

int である RFID RSSI 値を取得し、それを char ポインターに変換して追加する必要があるという要件があります。以下は私がそれをした方法です。

しかし、コードの実行中に次の例外が発生します。

ここで何が間違っていますか?これをオンラインの C コンパイラで実行すると、問題なく動作します。この例外は、次の行でスローされます。