我想使用指针反转字符串。我收到了分段错误!关于那个的任何想法? 详细信息在代码中。顺便说一下,这是实现这些东西的正确方法吗?
谢谢,
格哈德!
我的代码:
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;
}
答案 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.提到的粘贴代码还有其他问题,但我相信这些复制粘贴权限。