使用 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.h
和 gets_s
。
您的程序存在多个问题:
您对 gets_s
的调用不正确,根据 this and this,gets_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;
}
我正在构建一个程序来反转 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.h
和 gets_s
。
您的程序存在多个问题:
您对 gets_s
的调用不正确,根据 this and this,gets_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;
}