#include<stdio.h>
#define ASIZE 50
void Reverse(char *str){
int Asize,i=0;
char temp;
// Find the length of the string
while(*(str+i)!='\0'){
i++;
}
Asize=i;
// string reverse
for(i=0;i<(Asize/2);i++){
temp = *(str+i);
//may be below is some error with first input method 1
//but for input method 2 it works perfectly
*(str+i) = *(str+(Asize-(i+1)));
*(str+(Asize-(i+1))) = temp;
}
}
int main()
{
//input method 1. (error aries while i pass the pointer as argument)
char *s = "abcxyz";
//input method 2 (works perfectly while as function parameter)
char s[ASIZE];
scanf("%s",s);
Reverse(s);
printf("%s",s);
}
在主要的输入方法1不能完全用于字符串的反向,但方法2工作。 我的概念对于char指针的内存表示并不清楚。也许我不善于正确地提出问题,但有人请说清楚为什么方法1不起作用。在此先感谢您的帮助。
答案 0 :(得分:-1)
"abcxyz"
实际上是const char[7]
类型,在某些情况下可以衰减到const char*
。
不 char*
类型;尝试修改字符串时的行为是 undefined 。
char s[ASIZE];
是具有自动存储持续时间的char
数组。您可以随意修改任何元素。