试图复制c中的字符串,第一个字母是';不要被抄袭
我试图写一个非常简单的程序,但我在这里找不到问题。尝试了不同的方法,这就是我现在尝试的:试图复制c中的字符串,第一个字母是';不要被抄袭,c,c-strings,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
#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);
}
#包括
void copyr(char*p,char*h){
int i=0,j=0;
整数长度=0;
长度=strlen(p);int l=长度;
对于(i=0;i
while(*p++=*h++){
;
}
完成后,p
将指向字符串副本的终止\0
字符。在此循环中,结束后:
while (p){
printf("%c",p[i++]);
}
p将指向该元素。您将在其后面打印字符(即字符串外),并且此循环仅在p变为0时终止(这将在整数溢出后发生)。实际上,该程序在此之前会崩溃。您用于复制字符串的黑客方法可能非常奇特,但并非在几乎所有情况下都非常有用。我建议您只需使用标准库函数,如strcpy
这里有许多问题
将p
和h
作为参数传递,不要使用&p
。变量p
已经是指向字符数组的指针。和使其成为指向指针的指针
您正在循环中向后复制,将h
分配给p
您的打印循环已中断:终止条件应为*p
而不是p
。此外,您的复制代码已将p
提前到字符串末尾
swap()
是一个误导性的名称。它不是在交换两个字符串。它是在将一个字符串复制到另一个字符串。即使以后添加反转,它仍然是在反转,而不是在交换
您应该将源字符串参数声明为const
。这将检测到上面的问题2
这是反转字符串的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--;
}
}
void reverse(字符*字符串)
{
int长度,c;
字符*开始,*结束,温度;
长度=strlen(字符串);
开始=字符串;
结束=字符串;
对于(C=0;C<(长度为1);C++)
end++;
对于(C=0;C<长度/ 2;C++)
{
温度=*结束;
*结束=*开始;
*开始=温度;
begin++;
结束--;
}
}
这是有效的代码:
#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);
}
#包括
void copyr(char*p,char*h){
int i=0,j=0;
整数长度=0;
长度=strlen(p);int l=长度;
对于(i=0;i使用此函数实现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;
}
我很好奇第二个循环的输出是什么,因为p
很好地进入了未定义行为的领域,甚至被评估得更少。你应该传递p,h
,而不是&p,&h
。你的第二个字符串,未填充和不确定,正在吹走你的第一个,你确定那些参数是正确的吗按照正确的顺序?你是对的,我应该使用常规函数,但作业说明我应该自己更正它。谢谢。