我想要一个关于你从main调用反向文本的函数的帮助。但是,该计划很有效,或多或少"但它崩溃了。以下是代码的外观
#!/usr/bin/python
text_file=open('read.txt', 'r')
filename = text_file.readlines()
f = open('out.txt', 'w')
for elem in filename:
#print f, 'set security idp idp-policy $policy rulebase-ips rule
f.write('set security idp idp-policy $policy rulebase-ips rule matchattacks predefined-attacks'+ elem+'\n')
f.close()
字符串被反转为mpus,但随后崩溃,显然似乎数组只能接受4个字符,如果我将其更改为5而整数值为5,则它根本不会工作。 任何帮助将不胜感激。
答案 0 :(得分:5)
strlen(&array)
和printf("%s", &array);
错了。它们将通过指针而不是字符串的位置。使用strlen(array)
和printf("%s", array);
。
reverse('supm', 4);
也是错误的,因为这个调用的第一个参数不是字符串而是实现定义的整数。
请注意,只需将其更改为reverse("supm", 4);
即可,因为修改字符串文字是不允许的。
此外,最后一次getchar();
已被执行,因为它位于return 0;
之后。
试试这个:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void reverse(char * array, int numberOfChars) {
int begin = 0;
int end = 0;
char temp;
end = strlen(array) - 1;
printf("%s", array);
while (begin < end) {
temp = array[begin];
array[begin] = array[end];
array[end] = temp;
begin++;
end--;
}
}
int main() {
char supm[] = "supm";
reverse(supm, 4);
puts(supm); /* added this to see if this code is working well */
return(0);
}
也许您应该使用参数numberOfChars
而不是strlen(array)
,因为您传递了参数,但根本没有使用它。
答案 1 :(得分:3)
我立刻想到了一些事情:
char*
,您要传递char**
。而不是strlen(&array)
,请使用strlen(array)
。printf
类似的故事。而不是printf("%s", &array)
,请使用printf("%s", array)
。'supm'
应为"supm"
。您也无法修改字符串文字,因此您需要设置包含字符串的变量,然后传递变量。return(0)
之前,您getchar
。这意味着永远不会调用getchar
。numberOfChars
未使用。删除该参数或使用它而不是strlen
。答案 2 :(得分:1)
在您的函数reverse
-
end = strlen(&array) - 1;
printf("%s", &array);
您将char **
传递给期望strlen
的{{1}}并尝试使用const char *
打印char **
。 Jusr将%s
传递给这两个函数。
并在array
-
main
如果你甚至做reverse('supm', 4);
这将是字符串文字,因此不变(修改它会导致问题)。
这样做 -
"spum"
编译器必须已为这些语句发出警告,如果没有,则启用编译器警告。
答案 3 :(得分:1)
array
已经是指针 - &array
为您提供指向指针的指针。所以将strlen调用更改为:
strlen(array);
你需要在传递给函数之前定义字符串 - 否则字符串只存在于你的函数中,你将无法在外面访问它。
char mystr[] = "supm";
reverse(mystr, 4);
printf("%s\n", mystr);
return 0;
答案 4 :(得分:1)
尝试此代码我修复了所有代码问题。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void reverse(char * array, int numberOfChars) {
int begin = 0;
int end = 0;
char temp;
end = strlen(array) - 1;
printf("%s\n", array);
while (begin < end) {
temp = array[begin];
array[begin] = array[end];
array[end] = temp;
begin++;
end--;
}
}
int main() {
char str[] ="sump";
reverse(str, 4);
puts(str);
return(0);
}
您可以从此代码的问题中学到什么?
void reverse(char * array,int numberOfChars)/ * definition * /
反向('supm',4); / *调用函数* /
比较这两个定义中的第一个参数是传递字符数组char *array
但是在调用时你传递的是'sump'
。现在请记住,除了字符,你可以使用""
所以在这里你应该使用"sump"
end = strlen(&amp; array) - 1;
参考here
它的参数是常量字符指针。但是你在这里传递&array
。我猜你认为&array
是数组的地址但是数组array
代表地址并且array[i]
代表值
的getchar()
此功能用于读取输入而非打印字符串。 参考strlen
要打印反转输出,最后应使用getchar而不是getchar
答案 5 :(得分:0)
在main
函数中,行reverse('supm', 4);
有一些错误。首先,它是一个字符常量,而不是字符串,因此您最终会将无效指针值传递给reverse
函数。您可能打算使用"supm"
这是一个字符串,并且与您的char *
函数所期望的reverse
匹配。但是,"supm"
是一个字符串文字常量,所以尽管你可以指向它,但是不允许你修改它。所以你应该做这样的事情:
char rev[] = "supm";
reverse(rev, 4);
此处rev
是一个5 char
的数组,初始化为{'s', 'u', 'p', 'm', '\0'}
。
您目前没有使用numberOfChars
的{{1}}参数,因此您可以将其删除。