C函数,反向字符串

时间:2015-12-04 14:20:59

标签: c function

我想要一个关于你从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,则它根本不会工作。 任何帮助将不胜感激。

6 个答案:

答案 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)

我立刻想到了一些事情:

  1. strlen应该使用char*,您要传递char**。而不是strlen(&array),请使用strlen(array)
  2. printf类似的故事。而不是printf("%s", &array),请使用printf("%s", array)
  3. 当你的字符串文字应该使用双引号时,你的字符串文字错误地使用单引号。您的'supm'应为"supm"。您也无法修改字符串文字,因此您需要设置包含字符串的变量,然后传递变量。
  4. 在致电return(0)之前,您getchar。这意味着永远不会调用getchar
  5. 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)

  1. array已经是指针 - &array为您提供指向指针的指针。所以将strlen调用更改为:

    strlen(array);
    
  2. 你需要在传递给函数之前定义字符串 - 否则字符串只存在于你的函数中,你将无法在外面访问它。

    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}}参数,因此您可以将其删除。