我有一个函数void copy(char *temp,char input[length])
。我需要做的是将temp的值复制到输入数组中,但是从输入数组的末尾开始。
我没有正确构建问题。 这就是我想要做的。
我输入了长度为20的数组。我得到一个值为'test'的临时数组。然后我想在输入数组中复制temp,其中输入[19] = t,输入[18] = e等。
现在当我再次调用该函数时,如果我想将xyz复制到输入数组,则输入[15] = x,输入[14] = y,输入[13] = z。
我想这样做,直到我用所有值填充输入数组。
void copy(char *temp,char input[])
这是功能定义。
现在让我们来看看我们要做什么,
char* temp={"abcde"};
char input[100]={};
//I want to move data from temp into input array such that
printf("%c",input[95]); // gives output as a
printf("%c",input[96]); // gives output as b
这是我到目前为止所写的内容。
char* copy(char* ptr,char data[])
{
int start=sizeof(data)/sizeof(char)-strlen(data);
int end=start-strlen(ptr);
int j=0;
int counter=0;
for(counter=start;counter>end;counter--)
{
data[counter]=ptr[j++];
}
printf("%s",data);
return data;
}
当我调用此函数时,我以这种方式得到另一个错误,
char data[100]={};
char* temp={"abcde"};
char* output=copy(temp,data);
data=output;
将'char *'赋值给'char [100]'的数据=输出行的不兼容类型
答案 0 :(得分:2)
这已经作为算法实现:
std::reverse_copy( input, input+length, output );
在相关说明中,您的功能的签名:
void copy(char *temp,char input[length])
实际上意味着:
void copy(char *temp,char *input)
也就是说,input
数组的长度不是函数签名的一部分,编译器不会检查它。考虑将大小作为额外参数传递,或者通过引用传递数组。此外,源阵列未被修改,因此它应该是const char*
答案 1 :(得分:-1)
如果是字符串,您可以使用strlen
检查输入字符串的大小,然后将其复制。另一方面,如果它是一个不以'\0'
结尾的字符数组,则必须为该长度设置一个新参数。
第一种情况(您说copy the values of temp into input array
,因此我们将temp
的内容复制到input
,忽略其名称):
void copy(char *temp, char input[length])
{
for(int i = strlen(temp) - 1; i >= 0; i--)
{
input[i] = temp[i];
}
}
第二种情况:
void copy(char *temp, char *input, size_t length)
{
for(int i = length - 1; i >= 0; i--)
{
input[i] = temp[i];
}
}
否则,您可以使用标准库函数reverse_copy
。