因為你在dest++時,改變了dest的指向的位置,所以沒有輸出正確的結(jié)果。
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)貴定,10余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
按照你的程序給你修改了一下,請參考。
1 #include stdio.h
2 #include string.h
#include malloc.h // 注意這里:增加使用malloc的頭文件,消除warning
3 main()
4 {
5 char *a = "abc";
6 char *rever(char *dest,const char *src);
7 char *b = (void *)malloc(strlen(a)+1);
memset(b, 0x00, sizeof(strlen(a)+1)); // 注意這里:對malloc的buf進(jìn)行初始化
8 printf("%s\n", rever(b,a));
9 }
10 char *rever(char *dest,const char *src)
11 {
12 int n;
char *temp = dest; // 注意這里:用來記錄dest的初始地址
13 for (n = strlen(src)-1;n=0;dest++,n--)
14 *dest = *(src+n);
15 return temp; // 注意這里:返回dest字符串的首地址
16 }
程序給你測試通過。
只需要將字符數(shù)組的前后數(shù)據(jù)進(jìn)行交換就行了。
#include?stdio.h
#include?string.h
char*?reverse(char?*x)
{
int?i,?tem,?len?=?strlen(x);
int?n?=?len?/?2;
for?(i?=?0;?i?=?n;?i++)??//?前后交換數(shù)據(jù)
{
tem?=?x[i];
x[i]?=?x[len?-?1?-?i];
x[len?-?1?-?i]?=?tem;
}
return?x;
}
int?main()
{
char?p[]?=?"abcdefghijk";
printf("relust?=?%s\n",?reverse(p));
return?0;
}
char *revstr(char *str, size_t len)
{
char *start = str;
char *end = str + len - 1;
char ch;
if (str != NULL)
{
while (start end)
{
ch = *start;
*start++ = *end;
*end-- = ch;
}
}
return str;
}
讀取字符串,瀏覽字符串每一個字符,
如果是空格就輸出空格,
否則就保存當(dāng)前位置,從當(dāng)前位置移動到下一個空格或字符尾前,
從當(dāng)前位置開始反向輸出,直達(dá)回到保存的位置
最后輸出回車,結(jié)束
//以下是C語言版的,需要的話,可以看看
#includestdio.h
#includestdlib.h
#includestring.h
#define String_MaxSize 10000 //讀入字符串的最大長度
int main()
{
char stringPtr[String_MaxSize]; //保存讀入的字符串
//循環(huán)讀取直到文件尾
while(gets(stringPtr))
{
int stringPtr_length = strlen(stringPtr); //字符串的長度
int i;
//循環(huán)讀取整段字符串
for(i = 0; i stringPtr_length; i++)
{
//如果字符為空格
if(stringPtr[i] == ' ')
{
//直接輸出空格
printf(" ");
}
//如果字符非空格
else
{
int tempPos = i; //保存當(dāng)前i的位置
int j; //代替i進(jìn)行反向移動
//讀取到下一個空格或字符串尾的前一個位置
while(i stringPtr_length stringPtr[i] != ' ')
{
i++;
}
i--;
//輸出單詞
for(j = i; j = tempPos; j--)
{
putchar(stringPtr[j]);
}
}
}
//輸出回車
printf("\n");
}
//輸出回車
printf("\n");
return 0;
}
#includestdio.h
#includestring.h
string_change(char?*?p)
{
int?i,len;
char?temp;
len?=?strlen(p);
//printf("%d?\n",?len);
//test?printf("%d\n",len);
for(i=0;?i(len/2);?i++)
{
temp?=?p[i];
p[i]?=?p[len-1-i];
p[len-1-i]?=?temp;?
}
}
int?main(void)
{
char?a[20]?=?"1234567890";
printf("%s\n",a);
string_change(a);
printf("%s\n",a);
return?0;
}
兩個明顯的誤解:
char* a="12***"; 這樣定義是錯誤的。這樣 a指向字符串常量的指針。而字符串常量是不能改變的。所以停止運(yùn)行。
c中數(shù)組是從0開始編號的。所以字符串最后一個字符是a[len-1];