试图在c中复制字符串,第一个字母没有被复制

时间:2014-02-15 12:11:38

标签: c c-strings

我正在尝试编写一个非常简单的程序,但我在这里找不到问题。试过不同的方法,这就是我现在尝试的方法:

   #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中的字符串,但我相信找出问题会帮助我成功。

任何帮助都是适当的。

编辑:已解决,代码正在运行。

5 个答案:

答案 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)

这里有很多问题......

  1. 传递ph作为参数,请勿使用&p。变量p已经是指向字符数组的指针。 &使它成为指针指针。

  2. 您在循环中向后复制,将h分配给p

  3. 您的打印循环已损坏:终止条件应为*p而不是p。此外,p已经通过复制代码提前到字符串的末尾。

  4. swap()是一个误导性的名称。它不是交换两个字符串。它正在复制一个到另一个。即使稍后当你添加倒车时,它仍然是倒车,而不是交换。

  5. 您应该将源字符串参数声明为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);
}

您的反馈非常重要,谢谢。