sprintf

matlabでファイル名にインデックスをつけて出力したい場合,

filename = sprintf('hogehoge%03d.pgm',i);
imwrite(uint8(img),filename,'pgm');

と書く,一方C++では

char filename[100];
sprintf(filename,"hogehoge%03d",i);
〜

という感じ.本日,うっかり間違えた.なお,sprintfはfilenameに格納された文字数+1をint型で返すみたい.

matlabだと ' ' で文字列(文字)を囲むのだが,C++では " " である.これもうっかり間違えた.C++の場合は ' ' では文字, " " で囲むことで文字列の先頭アドレスを返し,char型ポインタを引数として利用している(はず).Matlabの場合は,よくわからない.Matlabの内部の構造とか処理の方法とか,全然しらない.実験できればいいんだよ,といういい加減さ.
あと,C++では配列の先頭ポインタを渡す方法として、添字を指定せずに配列名を使う,次のような書き方があったような.

〜
char arr[100] = "test";
printf("%s\n",arr) ;
arr[] = "test2";
printf("%s\n",arr) ;
〜

これは添字を指定しないことで配列の先頭アドレスを渡している(うろ覚え).stringを使った方が変なミスをせずにすみそうだが.

あと,char型の配列を宣言するときに,配列数を指定せずに

char filename[];
〜

と書いたらコンパイラに怒られた.CもC++も全然使って無いのでわすれまくっている.MatlabのCell感覚でやってしまった.C++の場合は領域を確保してからでないとダメ.添字なしで宣言するのは,宣言時に初期化するときのみか.

char filename[] = "hogehoge";