【问题标题】:Trying to reverse a string without using string.h library functions in C using pointers尝试在不使用 C 中使用指针的 string.h 库函数的情况下反转字符串
【发布时间】:2021-03-31 18:18:36
【问题描述】:

中途返回显示--进程返回-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--;
 }
}

【问题讨论】:

  • char temp,*q; *p=*q; - 在这里您尝试取消引用 q,但您尚未为其分配任何有效值。这会导致未定义的行为。您的代码中可能还有其他问题。
  • 没有警告?甚至没有警告 C4700:使用了未初始化的局部变量 'q'
  • 令人惊讶的是,它没有给出任何警告或错误。

标签: c string pointers reverse


【解决方案1】:

你从未初始化过 q。它指向完全随机的东西。

修复是char temp, *q = p;

【讨论】:

  • 同时改变 while 条件:while (*q != 0) ... 你必须测试 q 指向的不是 p。
【解决方案2】:

是否按照回答进行了以下更改,并添加了使代码正常工作的更改。

      #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--;
         }
        }

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 2021-03-25
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多