snprintf 文字列指定の長さに注意 メモ

queryとかから切り出した、X文字をコピーしようと思って、snprintfを使おうと思ったが、X文字にプラス「\0」の分の1byteを足さないといけなかった。

	int main()
	{
		char * matched_point;
		char * ret_str;
		if(matched_point = strstr("abcd=ddd&efcg=tttt","abcd="))
		{
			int length = 3;
			printf("length = length %d\n",length);
			ret_str = (char *)malloc(length+1);
			snprintf(ret_str,length+1,"%s",matched_point);
			//length+1しないと最後の文字が\nになって2文字しかコピーされない
			//snprintf(ret_str,length+1,"%s",matched_point);
	
			printf("ret_str %s\n",ret_str);
			printf("ret_str len : %d\n",strlen(ret_str));
		}
		free(ret_str);
	}

snprintf, strncpy, strncat の n について - 仕事メモ http://d.hatena.ne.jp/kovaio/20060115/1137564395

snprintf()にハマる - なぜか数学者にはワイン好きが多い http://d.hatena.ne.jp/tullio/20081023/1224776707

sizeof演算子 http://www.kis-lab.com/serikashiki/C/C03.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-29 (金) 16:21:37 (2828d)