C语言镜像字符串

#include"stdio.h"
#include"string.h"
int substr(char dst[],char src[],int start,int len)
{
	char* p = src + start;   
	int n = strlen(p);       
	int i = 0;
		if(n < len)
		{
			len = n;
		}
		while(len != 0)
		{
			dst[i] = src[i+start];
			len --;
			i++;
		}                       
		dst[i] = '\0';
	return 0;
}
int Reverse(char z[200])
{
	int i,j,t;
	i=strlen(z);
		for(j=0;j<i/2;j++) 
		{
			t=z[j];       
			z[j]=z[i-j-1];
			z[i-j-1]=t;   
		}
	return z[200];
}
int main()
{
	while(true)
	{
		char a[200],b[200];
		printf("请输入一个字符串");
		gets(a);
		int lengthA = strlen(a);
		substr(b,a,0,lengthA-1);
		Reverse(b);
		strcat(a,b);
		printf("镜像字符串为");
		puts(a);
	} 
}
### C语言中创建字符串的方法 在C语言中,可以通过两种主要方法来创建字符串: #### 方法一:通过字符数组定义字符串 可以使用字符数组的方式显式地存储字符串数据。这种方式下,字符串被分配到栈上或者静态存储区域(取决于声明的位置)。需要注意的是,在这种情况下,字符串是以字符数组的形式存在,并且最后一个字符必须是`\0`作为字符串终止符。 ```c char str[] = {'H', 'e', 'l', 'l', 'o', '\0'}; printf("字符串:%s\n", str); // 输出 Hello ``` 上述代码展示了如何手动初始化一个字符数组并将其视为字符串[^1]。注意,如果未提供初始大小,则编译器会自动计算所需的最小空间以容纳所有的字符以及终止符 `\0`。 另一种更简洁的方式来初始化同样的字符串如下所示: ```c char str[] = "Hello"; printf("字符串:%s\n", str); ``` 此形式不仅更加简便易读,而且同样会在内部附加一个隐式的'\0'于结尾处[^2]。 #### 方法二:通过指向字符串字面量的指针定义 第二种常见做法是指向已存在的只读字符串常量。在这种模式里,实际的数据通常位于程序镜像中的只读部分;因此尝试修改这些位置的内容会导致未定义行为或运行错误。 ```c char *pStr = "World!"; printf("字符串:%s\n", pStr); // 尝试改变*pStr 的值可能会引发异常,因为这可能是一个不可变对象. ``` 值得注意的一点是在某些实现中试图更改由这样的指针所指向的内容可能导致崩溃或其他不确定的结果,这是因为标准允许将此类字符串放置在一个只读段内。 综上所述,虽然两者都可以表示字符串,但是它们之间存在着本质区别——前者提供了可写入的空间而后者则未必如此。理解这一点对于编写健壮可靠的软件至关重要。 ```c #include <stdio.h> int main(){ char arrayString[]="Mutable String"; const char* pointerToLiteral="Immutable Literal"; /* 正确操作 */ arrayString[0]='m'; /* 错误示范: 下列语句会产生未定义的行为, 因为pointerToLiteral指向的是只读内存区域。 */ // pointerToLiteral[0]='i'; puts(arrayString); puts(pointerToLiteral); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值