作者grayyoung (灰狼)
看板C_and_CPP
标题[问题] 回传字串阵列
时间Fri Jul 24 01:44:27 2009
因为最近需要 所以常来发问 希望各位大大不要骂我...Orz...
话说 因为OpenCV都只接受 char型态的当作名字
今天我开启noise.bmp 我想要把它存成noise_happy.bmp
於是我很异想天开的写了
假设我今天用 setname("noise.bmp","happy")
char setname(char name[20],char set[20]){
char temp[20],start[50],end[20];
int g=0;
for(int i=0;i<20;i++,g++){
if(name[i]=='.') break;
start[i]=name[i];
}
for(int i=0;i<20;i++,g++){
end[i]=name[g];
}
sprintf(temp,"%s_%s%s",start,set,end);
return temp;
}
简单来说 就是把'.' 以前放到start '.'以後放到end
再用sprintf拼起来!!!
可是发生两件悲惨的事情
1.最後跑出来 noise "_happy.bmp
就是在start的後面会出现奇怪的值
2.根本不能回传 好像不能回传char阵列这种型态
想请问一下各位大大 我哪里做错了...( ̄ー ̄;)
或是要怎麽改 甚至是有简单的方法...
抱歉最近一直麻烦板上的各位大大
真的很感谢大家!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.139.4
1F:推 zlw:setname的规格要求return字元,你return的只是字元指标 07/24 01:50
2F:→ james732:而且这违反了十戒之六 07/24 02:10
3F:推 alen127:你的回传值是字元而已,假如要回传的是指标那请改一下就可 07/24 07:41
4F:推 VictorTom:start後面会有奇怪的值, 是因为找到'.'之後, 没有帮 07/24 08:27
5F:→ VictorTom:start补个'\0', 之後用sprintf+%s印就可能会印超过.... 07/24 08:28
6F:推 VictorTom:然後看起来原po想做的是把char []阵列不是指标传回去. 07/24 08:31
7F:→ VictorTom:会有像2F说的问题, 另外阵列也不能直接这样return的. 07/24 08:31
8F:→ VictorTom:把要存result的阵列一起当参数传进来是一个可行的作法. 07/24 08:32
9F:→ VictorTom:最後, char []在search/copy的时候也做边界判断较保险. 07/24 08:33
10F:→ grayyoung:欧欧 小弟愚昧 我会在去仔细看一次十诫 ~"~ 07/24 11:05
11F:→ grayyoung: start[g] = '\0' ; 可以解决第一个问题 07/24 11:42
12F:→ grayyoung:但是第二个还是没有办法 = = 07/24 11:43
13F:→ grayyoung:有谁有什麽办法吗 我利用char const *want 07/24 11:43
14F:→ grayyoung:可是在function改过want 原来的还是没变 07/24 11:43