C 同时使用数组和指针反转字符串

C 同时使用数组和指针反转字符串,c,string,pointers,C,String,Pointers,我想使用指针反转字符串。我有一个分割错误!有什么想法吗? 详情请参阅守则。顺便问一下,这是实现这些东西的正确方法吗 谢谢, 格哈德 我的代码: void copy_and_reverse(char* output, char* input) { int c = 0; int len = 0; char *begin; char *last; len = strlen(input); len -= 1; begin = input; last = output; for (c = 0; c

我想使用指针反转字符串。我有一个分割错误!有什么想法吗? 详情请参阅守则。顺便问一下,这是实现这些东西的正确方法吗

谢谢,

格哈德

我的代码:

void copy_and_reverse(char* output, char* input) {

int c = 0;
int len = 0;
char *begin;
char *last;

len = strlen(input);
len -= 1;

begin = input;
last = output;

for (c = 0; c < len; c += 1) {
    last += 1;
}

len += 1;

 for (c = 0; c < len; c +=1, begin += 1, last -= 1 {
 temp = *begin;
 *last = *begin;  // Here is my problem. Why am I not allowed to access this storage? I have no Idea about that!
 }
 }

int main(int argc, char **argv) {

int i = 0;
int leng = 0;
char *input[999] = {0};  // input gets the string of the argument, the string should stay in the right order
char *output[999] = {0}; // output should get the reversed string



if (argc == 1) {
    printf("Too few arguments.");
    return -1;
}

for (i = 0; i < argc; i += 1, argv += 1) {
    if (strlen(*argv) > 100) {
        printf("Maximum string length exceeded.");
        return -2;
    }
}
argv -= i;  //Unnecessary stuff
*argv += 1;
argv += 1;
argc -= 1;


for (i = 0; i < argc; i += 1, argv += 1) {
    *input = *argv;
    copy_and_reverse(*output, *input);
}

return 0;
}
void copy_和_reverse(字符*输出,字符*输入){
int c=0;
int len=0;
字符*开始;
字符*最后;
len=strlen(输入);
len-=1;
开始=输入;
最后=输出;
对于(c=0;c100){
printf(“超过最大字符串长度”);
返回-2;
}
}
argv-=i;//不必要的东西
*argv+=1;
argv+=1;
argc-=1;
对于(i=0;i
发现了一些无法解决您的问题的问题

1) 用这个

for (c = 0; c < len; c += 1) {
     last += 1;
}
(c=0;c{ 最后+=1; } 您正在将指针“last”设置为字符串的结尾。顺便说一句,这个for循环是无用的-更简单的是
last=output+len

2) 您没有声明“temp”变量。如何编译这段代码?然后,不使用temp变量

3) 可能是主要问题之一-您将输入作为指向字符串的指针数组。您可能需要字符数组(也称为字符串)-因此不要使用
char*array[999]
而是
char-array[999]

3) 为什么有
if(strlen(*argv)>100)
和长度为999的数组

4)
*输入=*argv无效。修复字符数组的oyur定义后,它应该是input=*argv。当然,您不需要这样做,只需使用
函数(*argv)
调用它即可。最好是
函数[argv[1]]
或者什么的

5) 花点时间学习C语言的基础知识,别忘了学习如何使用指针、数组和const关键字

祝你今天愉快

你宣布:

void copy_and_reverse(char* output, char* input);
但是你在打电话:

copy_and_reverse(*output, *input);
在哪里

换句话说,您已经定义了一个包含999个指向字符项的指针的数组,而不是您可能想要的包含999个字符项的字符串

问题是您将output[]的第一个元素初始化为0,因此*output==0,换句话说,您将一个空指针传递给copy_和_reverse()。当您尝试引用时,您会遇到分段错误

您真正需要的是:

char input[999] = {0}; 
char output[999] = {0}; 

你应该没事


粘贴的代码还有其他问题,比如@Mike S.提到的,但我相信这些复制粘贴的疏忽

如果像这样做,输入[999]={0};字符输出[999]={0}。。如何将参数(字符串)赋给数组?没有机会这样做:*输入=*argv,还有,不是吗?哦,是的,当定义字符输入[999]时,你可以;输入实际上是一个(char*),因此可以将其视为指针。当使用[]运算符时,说input[3]相当于do*(input+3)。另外,一定要考虑到@Mike S.提升的分数!!!
char input[999] = {0}; 
char output[999] = {0}; 
copy_and_reverse(output, input);