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

时间:2014-12-04 11:07:11

标签: 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 < 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;
}

2 个答案:

答案 0 :(得分:0)

发现一些问题,这些问题无法解决您的问题......

1)有了这个

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

你将指针“last”设置为字符串的结尾。顺便说一句,这个循环是没用的 - 更简单的是last = output + len;

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

3)可能是主要问题之一! - 您输入了作为字符串指针的数组。您可能希望拥有一系列字符(也称为字符串) - 所以不要使用char * array[999]char array[999]

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

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

5)花些时间学习C语言的基础知识,不要忘记使用指针,数组和 const 关键字。

度过愉快的一天

答案 1 :(得分:0)

你宣布:

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

但你在打电话:

copy_and_reverse(*output, *input);

,其中

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

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

麻烦的是你将output []的第一个元素初始化为0,所以* output == 0,换句话说,你将一个NULL指针传递给copy_and_reverse()。当您尝试引用时会出现分段错误。

你真正需要的是:

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

copy_and_reverse(output, input);

你应该没事。

像@Mike S.提到的粘贴代码还有其他问题,但我相信这些复制粘贴权限。