ラベル c の投稿を表示しています。 すべての投稿を表示
ラベル c の投稿を表示しています。 すべての投稿を表示

2012年5月21日月曜日

strncatを試してみました。

一般的な話は知らないのですが早速試してみました。
siriuth@ubntu-VirtualBox:~/dev/test$ cat strncat_test.c
#include    <stdio.h>
#include    <string.h>
void main(void){
    char    s1[256], s2[256];

    strcpy(s1, "1234567890");
    strcpy(s2, "abcdefghijklmnopqrstuvwxyz");

    printf("s1: %s \n", s1);
    printf("s2: %s \n", s2);
    strncat(s1, s2, 10);

    printf("after strncat s1: %s \n", s1);
}
 コンパイルも細かい点は完全に忘れてるので
gcc strncat_test.c
とだけ行ったところ a.out という実行ファイルが作られたので
./a.out
で実行(笑)
siriuth@ubntu-VirtualBox:~/dev/test$ ./a.out
s1: 1234567890
s2: abcdefghijklmnopqrstuvwxyz
after strncat s1: 1234567890abcdefghij
siriuth@ubntu-VirtualBox:~/dev/test$ 
となりました。
やはり第三引数の長さは第二引数の文字数の指定ですね。

uhttp…だいじょうぶなのだろうか(笑)

strncat

http://www9.plala.or.jp/sgwr-t/lib/strncat.html

ライブラリ関数の細かいところで何があるのか忘れてるのでリファレンス的な何かが無いかと検索したところなにやらstrncatの使い方が気になりました。

strncat(buffer, index_file, sizeof(buffer));

となっている部分。
これってbufferのサイズを超えてセットされませんかねぇ…
検索して引っかかったページの仕様とgccのライブラリの仕様が違うのかな?

どんな解釈が一般的だったかとかもあやしいのですけど。

delphiの解説で引っかかったページでは
#include <stdio.h>
#include <string.h>

void main(void)
{
 char *buf1="Borland";
 char buf2[]=" Delphi";
 
 strncat(buf1,buf2,strlen(buf2));
 printf("連結後:%s\n",buf1);
 getchar();

}
とかサンプルコードが載ってますけど、これこんなことしちゃいかんような(笑)
思いっきりリテラル領域を壊してる気がしますけどねw

いや…やりたいことは違うことなんですが。