カランのブログ

Kalan 頭像照片,在淡水拍攝,淺藍背景

四零二曜日電子報上線啦!訂閱訂起來

ソフトウェアエンジニア / 台湾人 / 福岡生活
このブログはRSS Feed をサポートしています。RSSリンクをクリックして設定してください。技術に関する記事はコードがあるのでブログで閲覧することをお勧めします。

今のモード ライト

我會把一些不成文的筆記或是最近的生活雜感放在短筆記,如果有興趣的話可以來看看唷!

記事のタイトルや概要は自動翻訳であるため(中身は翻訳されてない場合が多い)、変な言葉が出たり、意味伝わらない場合がございます。空いてる時間で翻訳します。

C言語における文字列処理

C言語では、strlenを使用して文字列の長さを取得することができます。ただし、strlenの呼び出しは常にO(n)O(n)です。文字列操作が頻繁に行われるアプリケーションでは、文字列の長さが大きい場合にパフォーマンスのボトルネックになる可能性があります。特に、高トラフィックのアプリケーションでは特にそうです。一つの解決策は、別の変数に文字列の長さを保存し、文字列に対する操作が行われるたびにこの変数を更新することです。これにより、文字列の長さにアクセスする際にはこの変数にアクセスするだけで済み、時間の複雑さはO(1)O(1)になります。

もう一つ注意する必要があるのは、C言語ではバッファの長さにデフォルトの設定がないということです。そのため、concatなどの操作を行う際には非常に注意が必要です。例えば、strcatを使用して以下のように記述した場合:

#include <stdio.h>
#include <string.h>

int main(void) {
  char buf1[20] = "abc";
  char buf2[] = "def";
  strcat(buf1, buf2);
  printf("%s\n", buf1);
  return 0;
}

このコードは、buf2の内容をbuf1に結合し、buf1の後ろに連結します。しかし、もしbuf1のサイズを5に減らした場合:

#include <stdio.h>
#include <string.h>

int main(void) {
+ char buf1[4] = "abc";
  char buf2[] = "def";
  strcat(buf1, buf2);

  printf("%s\n", buf1);
  return 0;
}

実行すると、コードにエラーが発生します。これは、buf1とbuf2を結合した後のサイズが4を超え、バッファオーバーフローが発生するためです。解決策は、concat操作を実行する前に結合後の文字列の長さがオーバーフローを引き起こすかどうかを事前にチェックし、必要に応じてメモリサイズを再割り当てすることです。

次の記事

リミックスのフォームとデータ読み取りメカニズムの探討

前の記事

Next.jsを使用してブログ全体を書き直す

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee