問題タブ [c-strings]

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 投票する
4 に答える
1439 参照

c++ - char 配列から int を変換/抽出する

gzread からの呼び出しに由来する cstring を取得しました。データがブロックであり、各ブロックが unsigned int、char、int、および unsigned short int で構成されていることはわかっています。

だから、このcstringを適切な変数に分割する標準的な方法は何だろうと思っていました。

最初の 4 バイトは unsigned int、次のバイトは char、次の 4 バイトは signed int、最後の 2 バイトは unsigned short int です。

適切なオフセットを使用して、memcpy を実行できると思います。

それとも、いくつかのビット演算子を使用する方が良いですか? シフトとマスキングのように。

それとも、11 バイトすべてを何らかの構造体に直接 gzreading する方がよいでしょうか、それとも可能でしょうか? 構造体のメモリ レイアウトは修正されていますか? これは gzread で機能しますか?

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

c - puts関数がC++のソケットからの入力文字で機能しないのはなぜですか?

これは、ログインマネージャを実行しているサーバーのコードであり、悪意のあるアクセスをファイルにログインし、間違ったログインの結果を出力します。chars userとpassは、ソケットを使用したユーザー入力から取得されます。

問題は、出力コンソールとログファイルの両方での出力です。

このような:

なぜ奇妙な子嚢文字があるのですか?新しい行はソケットによるユーザー入力から来るので、どうすれば回避できますか?

0 投票する
3 に答える
96520 参照

c - 別の部分文字列を作成せずに、C 文字列の特定のセクションのみを出力することは可能ですか?

私は次のものを持っているとしましょう:

この文字列の最後の 5 バイトだけを印刷することは可能ですか? 最初の 5 バイトだけはどうでしょうか。printfこれを可能にするバリエーションはありますか?

0 投票する
4 に答える
2538 参照

c - 興味深い strcmp 実装の失敗。(ハ)

私は、C 標準ライブラリにアクセスできない小さなプロジェクトに取り組んでいます (ARM 構造でゼロからマイクロカーネルを構築します。printf も実装する必要がありました)。

この状況下で、Duff のマシン手法を使用して strcmp を実装しました。

以下はコード全体です。

それは理にかなっています。そして、エンドシステムの障害が発生するまで、しばらくの間、テストケースで機能しているように見えました. たどると、このstrcmpにたどり着きました。

最初は、最初に str1 をインクリメントしてから、str2 をインクリメントする前に str2 と比較したと思いました。1. そうではないことが判明しましたが、場合によってはそうなる可能性があることを確認していただけますか?

次に、問題が *str1 - *str2 にあると判断したため、1 を返すように変更しました。つまり、結果のコードは次のようになります。

私が望んでいたのは「等しい」チェックだけだったので、「1」に変更しても問題はありませんでしたが、元のコードが失敗した理由はまだ疑問に思っています。2. それがどのように失敗したかについて、誰かが光や提案を与えることができますか? strcmp は、str1 と str2 について詳しく説明するゼロ以外の値を返すという標準の C インターフェイスに従う必要があります。

テストケースは次のとおりです。

*program が "k3" の場合、"k1" が返され、"test_libc" は "perf" が返されました。

元の問題は「return 1」を与えることで解決されたため、この質問は純粋にCの関心事です。strcmp ドキュメントへの提案またはリンクも歓迎します。IEEE の仕様インターフェイスを見てきました

0 投票する
6 に答える
8180 参照

c - snprintf、C での整数から文字列への変換用

Cで整数を文字列に変換する小さなコードがあります。コードは、32 ビットと 64 ビットの両方のプラットフォームで動作する必要があります。

ループで引数を解析しているので、バッファを作成するには malloc が必要です

私の質問は次のとおりです。

もともとバッファオーバーランから保護したかったので、snprintfを使用するのは正しいことではないと考えましたが、整数のサイズがわかっているので役に立たないと思います。それでも、ここでのベストプラクティスは何かを知りたいです。

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

c++ - 文字列リテラルを char* に変換するとコンパイラの警告が表示されるのはなぜですか?

したがって、コンパイラは、これが文字列リテラルから char* への非推奨の変換であると教えてくれます。

これについて心配する必要がありますか?これは間違った方法ですか?

myStringを受け入れる関数に渡す必要があります。この変換なしchar*で を適切に初期化する必要があるのは誰ですか?char*

0 投票する
6 に答える
738 参照

c++ - 基本的な C スタイルの文字列メモリ割り当て

私は、主に C++ を使用し、c スタイルの文字列を使用する既存のコードを使用するプロジェクトに取り組んでいます。次のようにします。

これはコンパイルされ、出力が長い文字列で正常に実行されます。

しかし、なぜそれが機能するのかわかりません。私の理解は、

文字列リテラル「これはテストです」を保持するのに十分な大きさのメモリ領域へのポインタです。その場合、どうすればもっと長い文字列を同じ場所に保存できますか? 長い文字列を短い文字列用に取っておいたスペースに詰め込もうとしたため、これを行うとクラッシュすることが予想されました。

明らかに、ここで何が起こっているのかについての基本的な誤解があるので、これを理解する助けに感謝します.

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

find - エラー: 非クラス タイプ 'char [2000]' の '(cstring name)' 内のメンバー 'find' の要求

これが漠然としていたらすみません、私はまだプログラミングにかなり慣れていません(フォーラムも初めてです>_>)

わかりました、私のコードはファイルから数値を読み取り、その数値を使用してその量の単語を辞書の単語として読み取ることになっています。次に、それらの単語を配列に格納し、後で使用できるように保持します。ファイル内の辞書の単語がいくつかの段落になった後、それを読み取り、それを c-string 配列に設定します (iv はこれまでのところすべて理解しています)。 -string と各辞書の単語が出現する回数を数えます。現在、paragraph.find (word[0]) を試していますが、修正方法がわからないエラーが発生します。

エラー: |40|エラー: 'paragraph' 内のメンバー 'find' の要求は、非クラス型 'char [2000]' です |

コード:

infile2.txt は次のようになります。

3ステーキ|卵|と|

ステーキと卵と卵とステーキ、卵とステーキ、ステーキと卵...

おいしい。

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

c - scanf を使用して文字列を取得し、作成して while ループに対して検証する...取得し続ける

基本的に文字列として扱われる char* を作成しています。文字列は何度も使用されると想定されています。whileループでチェックしようとするたびに、「終了」するのが正しいかどうかを確認しようとしています...

*セグメンテーション エラーが発生し続けます...何が間違っているのでしょうか?かなりばかげた間違いです。

0 投票する
3 に答える
11889 参照

c++ - charへのポインタを操作するときに違反書き込み場所にアクセスする

文字列から重複する文字を削除する非常に単純なプログラムを書いています。Visual Studioを実行したところ、エラーが発生しました。

inteviews.exeの0x00d110d9で未処理の例外:0xC0000005:アクセス違反の書き込み場所0x00d27830。

何が問題なのか本当にわかりません。現在のセルは次のセルの値を取得します。


編集:

すでにに変更しようとしましたchar str[] = "abcad"が、それでも同じエラーが発生します。