我在将 char 指针指向的内容复制到另一个时遇到问题,即使我在使用strcpy之前为其分配了内存。我已经看到了一些关于strdup的建议,但我想知道在不需要它的情况下该怎么做。这是我的主要代码
int main (void)
{
char word[20];
leaftype destiny;
while(1)
{
printf("\nType in a word: ");
scanf("%s",word);
copy_leaf(&destiny,palavra);
if (palavra[0] == '0') break;
}
system("pause");
return 0;
}
我遇到的问题是函数copy_leaf:
void copy_leaf(leaftype* destiny, leaftype source)
{
printf("\n====start of copy_leaf======\n");
int i;
printf("strlen of source: %d",strlen(source));
printf("\nsource: ");
for(i = 0; i <= strlen(source); i++)
{
if(i == strlen(source))
{
printf("\\0");
}
else printf("%c-",source[i]);
}
*destiny = malloc((strlen(source)+1)*sizeof(char));
strcpy(*destiny,source);
printf("\nstrlen of destiny: %d",strlen(*destiny));
printf("\ndestiny: ");
for(i = 0; i <= strlen(*destiny); i++)
{
if(i == strlen(*destiny))
{
printf("\\0");
}
else printf("%c-",*destiny[i]);
}
printf("\n===end of copy_leaf======\n");
}
叶类型定义为:
typedef char* leaftype;
当我运行以“example”作为输入的代码时,我进入控制台:
Type in a word:
====start of copy_leaf======
strlen of source: 7
source: e-x-a-m-p-l-e-\0
strlen of destiny: 7
destiny: e-
它崩溃了(“program.exe 已停止工作等”在 Windows 7 上)。我正在使用 devcpp,但我的文件以 C 扩展名命名。谁能帮我修复这个 char* 到 char* 内容副本?我需要一个函数来做到这一点,因为我需要在我的 C 文件中多次将一个字符串的内容复制到另一个字符串。提前致谢!
ps:我已经在copy_leaf函数中尝试过的(绝望的解决方案):
- 将leaftype source更改为const leaftype source(那将是const char* source)
- 制作*destiny = strcpy(*destiny,source),因为 strcpy 返回一个指向目标字符串的指针