在C中使用指针尝试在不使用string.h库函数的情况下反转字符串

在C中使用指针尝试在不使用string.h库函数的情况下反转字符串,c,string,pointers,reverse,C,String,Pointers,Reverse,它返回一半并显示--processreturned-1073741819(0xC0000005) 此代码也不显示错误或警告。 只是想知道为什么会这样 #include<stdio.h> void reverse(char*); int main() { char str[200]; printf("Enter a string : "); scanf("%s",&str); reverse(str); printf("Re

它返回一半并显示--processreturned-1073741819(0xC0000005) 此代码也不显示错误或警告。 只是想知道为什么会这样

#include<stdio.h>

void reverse(char*);

int main()
{
char str[200];
printf("Enter a string : ");
scanf("%s",&str);
reverse(str);
printf("Reversed string : %s",str);
}

void reverse(char *p)
{
char temp,*q;
*p=*q;
while(*p!='\0')
{
    q++;
}
while(p<q)
{
    temp=*p;
    *p=*q;
    *q=temp;
    p++;
    q--;
 }
}
#包括
无效反向(字符*);
int main()
{
char-str[200];
printf(“输入字符串:”);
scanf(“%s”和&str);
反向(str);
printf(“反向字符串:%s”,str);
}
无效反向(字符*p)
{
焦温,*q;
*p=*q;
而(*p!='\0')
{
q++;
}

而(p你从来没有初始化过q。它指向完全随机的东西


修复是
chartemp,*q=p;

按照回答进行了以下更改,并添加了一个更改,使代码正常工作

      #include<stdio.h>
      void reverse(char*);
      void main()
       {
         char str[20];
         printf("Enter a string : ");
         scanf("%s",&str);
         reverse(str);
         printf("Reversed string : %s",str);
        }
        void reverse(char *p)
        {
         char temp,*q=p;
         while(*q!='\0')
         {
           q++;
         }
         q--;
         while(p<q)
         {
          temp=*p;
          *p=*q;
          *q=temp;
           p++;
           q--;
         }
        }
#包括
无效反向(字符*);
void main()
{
char-str[20];
printf(“输入字符串:”);
scanf(“%s”和&str);
反向(str);
printf(“反向字符串:%s”,str);
}
无效反向(字符*p)
{
字符温度,*q=p;
而(*q!='\0')
{
q++;
}
q--;

虽然(p
char-temp,*q;*p=*q;
-此处您试图取消引用
q
,但尚未为其分配任何有效值。这会导致未定义的行为。代码中可能存在其他问题。没有警告?甚至没有警告C4700:使用了未初始化的局部变量“q”?令人惊讶的是,它不会给出任何警告或错误。还有c更改while条件:while(*q!=0)…必须测试q指向的不是p。