我正在编写一个函数,应该使用指针
将字符串从数组复制到另一个数组#include<stdio.h>
void copy_string(char *to,char *from);
void print_array(char *a);
int main(void)
{
char *s1="Salahuddin";
char *s2="Ashraf";
print_array(s1);
print_array(s2);
copy_string(s1,s2);
print_array(s1);
print_array(s2);
return 0;
}
void print_array(char *a)
{
while(*a!='\0')
printf("%c",*a++);
printf("\n");
}
void copy_string(char *to,char *from)
{
while(*from != '\0')
{
*to++=*from++;
}
}
但是当运行这段代码时,它只打印一次数组(在调用copy_string之前)函数,然后退出程序。
我试过调试它,发现当调用copy_string函数时,编译器去那里,检查* from!='\ 0'条件然后进入while循环,然后直接进入函数的末尾。
我无法弄清楚问题是什么?
任何人都可以帮忙吗?提前谢谢
答案 0 :(得分:2)
char *s1="Salahuddin";
char *s2="Ashraf";
这个s1
和s2
指向常量字符串实际上不是字符数组。而且他们的内容不应该改变。
将其更新为
char s1[20] ="Salahuddin";
char s2[20] ="Ashraf";
此处20
只是随机数,您可能想要更改它。
同样在复制功能中,在字符串的末尾添加'\0'
。
void copy_string(char *to,char *from)
{
while(*from != '\0')
{
*to++=*from++;
}
*to = '\0';
}
答案 1 :(得分:1)
这里最大的问题是s1
和s2
指向文字字符串,这些是常量且只读。所以你不能在这里使用普通指针。
相反,你必须使用数组,例如
char s1[] = "some string";
char s2[] = "some other string";
您要做的第二件事是确保目标有足够的空间用于源字符串。在上面的示例中它不。通过使数组固定大小可以很容易地解决这个问题:
char s1[30] = "some string";
char s2[30] = "some other string";
答案 2 :(得分:0)
两件事:
如果你要更改字符串中的字符值,malloc()就是新的,你可以这样做(这也会确保你有足够的存储空间)。但是,你不能说
char *foo = "blah";
foo[0] = 'a'; /* WRONG */