我正在尝试编写一个非常简单的程序,但我在这里找不到问题。试过不同的方法,这就是我现在尝试的方法:
#include <stdio.h>
void copyStr(char *p, char *h){
int i=0,j=0;
int length=0;
length=strlen(p); int l=length;
for (i=0; i<length; i++){
h[i]=p[l-1];
l--;
}
char *temp=&h[0];
for (i=0; i<length; i++){
printf("%c",temp[i]);
}
}
main(){
char p[]="abcde";
char h [sizeof(p)];
copyStr(p,h);
}
当我复制这些字符串时,似乎没有复制第一个字母。
我的作业实际上更大,试图复制REVERSE中的字符串,但我相信找出问题会帮助我成功。
任何帮助都是适当的。
编辑:已解决,代码正在运行。
答案 0 :(得分:5)
这是反转字符串的C代码,
void reverse(char *string)
{
int length, c;
char *begin, *end, temp;
length = strlen(string);
begin = string;
end = string;
for ( c = 0 ; c < ( length - 1 ) ; c++ )
end++;
for ( c = 0 ; c < length/2 ; c++ )
{
temp = *end;
*end = *begin;
*begin = temp;
begin++;
end--;
}
}
答案 1 :(得分:3)
这里有很多问题......
传递p
和h
作为参数,请勿使用&p
。变量p
已经是指向字符数组的指针。 &
使它成为指针指针。
您在循环中向后复制,将h
分配给p
。
您的打印循环已损坏:终止条件应为*p
而不是p
。此外,p
已经通过复制代码提前到字符串的末尾。
swap()
是一个误导性的名称。它不是交换两个字符串。它正在复制一个到另一个。即使稍后当你添加倒车时,它仍然是倒车,而不是交换。
您应该将源字符串参数声明为const
。这可能会检测到上面的问题2.
答案 2 :(得分:2)
迭代后:
while(*p++=*h++){
;
}
结束,p
将指向字符串副本的终止\0
字符。在此周期之后:
while (p){
printf("%c",p[i++]);
}
p将指向该元素。您将在它之后打印字符(即字符串之外),并且此循环仅在p变为0时终止(这将在整数溢出后发生)。实际上程序会在此之前崩溃。用于复制字符串的hacky方法可能非常奇特,但在几乎所有情况下都不是很有用。我建议您只使用标准库的功能,如strcpy
。
答案 3 :(得分:2)
使用它来实现strcpy
char * strcpy(char *strDest, const char *strSrc)
{
assert(strDest!=NULL && strSrc!=NULL);
char *temp = strDest;
while(*strDest++ = *strSrc++); // or while((*strDest++=*strSrc++) != '\0');
return temp;
}
答案 4 :(得分:1)
这是有效的代码:
#include <stdio.h>
void copyStr(char *p, char *h){
int i=0,j=0;
int length=0;
length=strlen(p); int l=length;
for (i=0; i<length; i++){
h[i]=p[l-1];
l--;
}
char *temp=&h[0];
for (i=0; i<length; i++){
printf("%c",temp[i]);
}
}
main(){
char p[]="abcde";
char h [sizeof(p)];
copyStr(p,h);
}
您的反馈非常重要,谢谢。