C语言 字符串反转

 特点:利用fgets代替scanf来获得用户输入,避免缓冲区溢出;

#define  _CRT_SECURE_NO_WARNINGS

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

void string_reverse(char* str)
{
	int i = 0;
	int j = strlen(str) - 1;
	char temp;
	while (i < j)
	{
		temp = str[i];
		str[i] = str[j];
		str[j] = temp;
		i++;
		j--;
	}
	    
}

int main(void)
{
	char str[60] = { 0 };
	printf("enter string like abcdef:\n");
	fgets(str, sizeof(str), stdin);
	//fgets函数可限制读取的字符数,避免缓冲区溢出(例如利用scanf的话,输入的字符数超过60会导致缓冲区溢出;

	str[strcspn(str, "\n")] = '\0';// 移除字符串末尾的换行符(如果有的话)

	string_reverse(str);
	printf("reverse string is %s\n", str);
	
	return 0;
}

1  利用fgets代替scanf来获得用户输入,避免缓冲区溢出;

fgets函数可以指定读取的长度,

下面的程序表示最多读取59个字符,和一个字符串终止符'\0',若用户输入字符数超过59,只读取前59个,超过的部分将留在缓冲区;

char str[60];

fgets(str, sizeof(str), stdin);   
//这里sizeof(str)=60,表示最多读取59个字符,和一个字符串终止符'\0'

str[strcspn(str, "\n")] = '\0'; 的作用

  1. 查找换行符: strcspn(str, "\n") 返回 str 中第一个换行符 '\n' 的索引,如果没有找到换行符,则返回字符串长度。
  2. 移除换行符: str[strcspn(str, "\n")] = '\0'; 用空字符 '\0' 替换换行符,将其从字符串中移除。

假设用户输入 abcdef 并按 Enter 键:

  • 加上移除换行符的代码: str 将是 "abcdef"(不含换行符)。
  • 不加移除换行符的代码: str 将是 "abcdef\n"(含换行符)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值