[英]string reverse without new array
嗨,有人可以告訴我這個錯誤嗎?
#include<stdio.h>
int main()
{
char a[]="abcdefgh";
int i=0;
int n=strlen(a);
char *first;
char *second;
char *c;
*first=a[0];
*second=a[7];
for(i=0;i<=n/2;i++)
{
*c=*first;
*first=*second;
*second=*c;
first++;
second--;
}
for(i=0;i<=7;i++)
{
printf("%c",a[i]);
}
}
問題是這些行:
*first=a[0];
*second=a[7];
我想你想要的是獲得first
和second
指向正確的元素,那就是:
first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element
您所擁有的是將a[0]
的值分配給first
指向的地址,該地址尚未初始化。 另外,您最好在這里使用n - 1
而不是7,因此您不必對大小進行硬編碼。 另外這些行:
*c=*first;
*first=*second;
*second=*c;
您會看到,指針c
也尚未初始化。 您不應該使用c
作為指針:
char c;
然后像使用普通變量一樣使用它:
c = *first;
*first = *second;
*second = c;
只是設計說明,您不需要計數器/循環。 相反,您知道您完成的second
是<=到first
(即我們已經或已經越過了中點):
while (second > first)
最后,穿過那里的一些空間! 您的代碼非常簡潔,難以閱讀。 不要害怕將事物間隔開。
*first=a[0];
指針first
未初始化,因此您正在分配給無效的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.