使用strcpy函数时的奇怪问题

juffun
使用strcpy函数时的奇怪问题

[code]
    tmp[0]=(gchar *)malloc(30);
    tmp[1]=(gchar *)malloc(30);
    tmp[2]=(gchar *)malloc(30);

for ( i=0; i<length; i++)
    {
        g_printf("%s",goods[i].name);
        glist[i]=(gchar *)malloc(sizeof(goods[i].name));
        strcpy(glist[i],goods[i].name);  
        以下的部分加上就说段错误,不加就没问题,不知道为什么?谢谢大牛
        strcpy(tmp[0],goods[i].name);
        strcpy(tmp[1],goods[i].ID);
        strcpy(tmp[2],(gchar *)goods[i].amount);
   
   }
结构体是这样定义的:
struct GOODS
{
gchar name[20];
gchar ID[10];
gint amount;
}goods[100];
[/code]

[[i] 本帖最后由 juffun 于 2008-6-19 21:07 编辑 [/i]]

cugb_cat
goods[ i ].name是什么类型的?
ps,代码用[code][/code]包起来

juffun
回复 #2 cugb_cat 的帖子

那个是字符串型的

r2r4
[color=Red]strcpy(tmp[2],(gchar *)goods[i].amount);[/color]

你想干什么?

77h2_eleven
问题应该出现在这句话

[code]
strcpy(tmp[2],(gchar *)goods[i].amount);
[/code]

fertiland
[table=95%][tr][td][font=FixedSys][color=#000000]        [color=#FF0000]strcpy[/color][color=#0000CC]([/color]tmp[color=#0000CC][[/color]1[color=#0000CC]][/color][color=#0000CC],[/color]goods[color=#0000CC][[/color]i[color=#0000CC]][/color][color=#0000CC].[/color]ID[color=#0000CC])[/color][color=#0000CC];[/color]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[color=#FF0000]strcpy[/color][color=#0000CC]([/color]tmp[color=#0000CC][[/color]2[color=#0000CC]][/color][color=#0000CC],[/color][color=#0000CC]([/color]gchar [color=#0000CC]*[/color][color=#0000CC])[/color]goods[color=#0000CC][[/color]i[color=#0000CC]][/color][color=#0000CC].[/color]amount[color=#0000CC])[/color][color=#0000CC];[/color][/color][/font][/td][/tr][/table]

char *strcpy( char *dest, const char *src);
result returns the a pointer to the destination string.
for the strcpy, as you know, only it recognizes the terminating characters. so if you don't initialize the src, you may point to invalid space, or crash your system.

juffun
回复 #4 r2r4 的帖子

我做了一个gtk下的clist的表,要显示数据,只能以字符串的形式

juffun
回复 #6 fertiland 的帖子

so if you don't initialize the src这个是不是初始化的意思啊?那我该怎么初始化呢?

hyrish
strcpy(tmp[2],(gchar *)goods[i].amount);    这行中不能直接将一个整数转换成一个字符指针,如下:
strcpy(tmp[2],(gchar *)&goods[i].amount);  

你可以这样初始化:
memset(temp[0],   0,  30);
memset(temp[1], 0,   30);
memset(temp[2],  0,   30);

融化的冰山
int型变量不能用strcpy,改成用memcpy好了
int型变量没有结束符0

204tian
用 sprintf 多方便

buxoman
sizeof(char*) + 1
一定要加1。

juffun
问题解决了,就是在strcpy(tmp[2],(gchar *)goods[i].amount);这行,这里的强制类型转换好像不对,用了个itoa函数就好了,不知道为什么??