已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
8天前关闭
Improve this question
我在替换C中字符串数组中的字符串时遇到了问题
基本上,我有:char * words[3];
现在我们假设这里的字符串是“猫”,“狗”,“鸟”。
现在,我有一个包含“mouse”的char字[],我想在数组中用“mouse”替换“dog”。
我试过使用strcpy(words[2], word);
,但这并不像预期的那样工作,我假设这是因为鼠标的长度大于狗的长度。所以,我想知道在这种情况下你会如何完成这项任务。
提前感谢任何帮助
4条答案
按热度按时间fgw7neuy1#
输出:
xxhby3vn2#
代码:
.大致相当于:
重要的是
char * s
和char s[]
不一样,所以试图在0x001238上复制“mouse”并不能达到你想要的效果。给定
char word[] = "mouse";
,word
确实有一个地址,所以你可以像在word[1] = word;
中那样分配它,这将起作用。当然,如果你把word[0] = 'h';
改成“house”,那么word[1]
也会变成“house”。如果这对你来说不是问题,那就好,否则你需要
words
是一个字符数组而不是一个指针数组,并确保有足够的字符来容纳所有你想要的单词。由于大多数单词都比这个短,所以很多字符都没有被使用,但这通常不是一个大问题。否则,您将不得不使用
malloc()
,free()
,strdup()
等来管理内存,这会变得复杂,所以最好避免这种情况,除非您真的需要。s4chpxco3#
你说得对:不可能增加字符串的大小,因为数组中的每个指针都指向一个常量字符串。下面是如何可视化内存布局:
你可以用一种方式声明你的数组,为每个字符串提供足够的空间,即。
事实上,由于这些是常量,数组应该声明为const,并且应该避免在实际程序中修改这些字符串。
brccelvz4#
下面的代码显示了一种实现方法。请注意,我们为将来的“mouse”strcpy()提供了足够的空间(10个字符)。这一点很重要,因为最初的声明:
...只为3个char类型的指针留出空间。你不能安全地strcpy()到那些指针,即使它们在声明中用字符串初始化。
输出量: