2011-11-01 44 views
0

好的,所以它是一个hw的一部分,我不能使用字符串来帮助我的问题。我有点卡住,因为我需要使用这些字符数组。有关如何解决此问题的任何提示?C2440错误,试图将一个常量字符更改为字符

int main() 
{ 
struct structure 
{ 
    char name[15]; 
}; 

structure ObrLog[2]= 
{ 
    {"Bambi"}, 
    {"Cindarella"}, 
}; 
ObrLog[1].nazwa="somethingnew"; //error here 
} 

回答

2

要C字符串复制到一个缓冲器中,使用memcpy。假设你的意思name而非nazwa

char newval[] = "somethingnew"; 

// in a function 
memcpy(ObrLog[1].name, newval, min(strlen(newval) + 1, sizeof(ObrLog[1].name)); 
ObrLog[1].name[14] = '\0'; // just to be sure the name is NUL-terminated 

其中min定义就留给读者做练习。 +1用于解释newval末尾的隐含NUL。

+0

可能只是继续前进,使用'15'作为'memcpy'的第三个参数(因为它似乎禁止使用'strlen') – anatolyg

+0

@anatolyg:表现出未定义的行为,因为它复制超出'newval'末尾的字节。 –

0

你不能像这样修改字符数组。您需要使用strcpy并了解缓冲区溢出。 (假设nazwa代替name笔误)

strcpy(ObrLog[1].name, "somethingnew"); 
+0

但请谨慎分配空间。由于你的第二个字符串比你的第一个字符串长,你会得到非常积极的结果。 – drdwilcox

+0

但这使用了string.h,它试图避免。还有其他建议吗? –

+0

@coolbartek - 尝试编写一个你自己的从源到目的地逐字节复制的文件。 – Mahesh

相关问题