使用 Visual Studio 在 C 中反转字符串

Reversing a string in C using Visual Studio

我正在构建一个程序来反转 visual studio 中的字符串,当我 运行 代码并输入我想要反转的单词时,程序崩溃了。

#include <stdio.h>
#include <conio.h>
#include <string.h>

main(void) {
    char r[256];
    int i, d;
    printf("\nEnter the word you want to reverse : ");
    gets_s(" %s", r, sizeof(r));
    d = strlen(r);
    for (i=d;i!=0;i--) {
        printf("%s",i);
    }
    return 0;
}
void rev(char *s)
{
    char *start, *end;

    end = start + strlen(s) - 1;
    for (start = s; end > start; ++start, --end) {
        char tmp;

        tmp = *start;
        *start = *end;
        *end = tmp;
    }
}

使用fgets函数,也像我一样把反转代码放在自己的函数里。所以最后的代码是

int main()
{
    char line[80];

    fgets(line, 80, stdin);
    /* don't allow empty string */
    if (*line == '[=11=]') {
        fprintf(stderr, "Empty string is not a string\n");
        return 1;
    }
    /* remove the \n placed by fgets */
    remnl(line);
    rev(line);
    printf("%s\n", line);

    return 0;
}
void remnl(char *s) { s[strlen(s) - 1] = 0; }
#include <stdio.h>
#include <string.h>
#include <conio.h>

int main(void) {
    char r[256];
    int i, d;
    printf("\nEnter the word you want to reverse : ");
    gets_s(r, sizeof(r));
    d = strlen(r) - 1;
    for (i = d; i >= 0; i--) {
        printf("%c", r[i]);
    }
    _getch();
    return 0;
}

请注意,我在 Linux 上试过你的程序,所以没有 MS Visual C++,更具体地说,没有 conio.hgets_s

您的程序存在多个问题:

您对 gets_s 的调用不正确,根据 this and thisgets_s 定义为:

char *gets_s( 
  char *buffer,
  size_t sizeInCharacters
);

您正在使用非法参数调用它。而不是 gets_s(" %s", r, sizeof(r)); 你需要这样称呼它:

gets_s(r, 256);

第一个参数是指向字符串缓冲区的指针,gets_s 函数将在其中存储来自输入的行,第二个参数是缓冲区的大小,请注意,在 char r[256] 中,您可以存储 255字符和终止零 ([=22=]).

您的 for 循环不正确,而不是 for (i=d;i!=0;i--) { 您需要这样做:

for (i=d-1;i>=0;i--) {

现在循环从最后一个字符开始而不是 [=22=] 并在 i < 0 时结束,即。最后一次打印将在 i=0 时。

最后一个错误是你错误地使用了 printf 而不是 printf("%s",i); 你需要做的是:

printf("%c",r[i]);

因为您正在打印字符:"%c" 用于 char 输出,r[i] 是字符串 r 中的第 i 个字符(不要忘记我们计算从 0).

所以,总的来说,程序应该是这样的:

#include <stdio.h>
#include <conio.h> // does not exist on GCC (Linux)
#include <string.h>

main(void) {
    char r[256]; // 255 characters + [=14=]
    int i, d;
    printf("\nEnter the word you want to reverse : ");
    gets_s(r, 256); // store at most 255 characters + [=14=] 
                    // does not work on GCC (Linux) even with -std=C11
    d = strlen(r);

    // start from last character and include first
    for (i=d-1;i>=0;i--) {
        // %c - character, r[i] gets the i-th character from string r
        printf("%c",r[i]);
    }
    return 0;
}