#include <stdio.h> 8 #include <string.h> 9 void func(char*p,int len) 10 { 11 char *q=p+len; 12 char *k=NULL; 13 for(int i=0;i<len;i++) 14 { 15 *k=*q; 16 k++; 17 q--; 18 } 19 *k='\0'; 20 p=k; 21 } 22 int main(int argc, char *argv[]) 23 { 24 char *p=NULL; 25 char arr[32]={0}; 26 gets(arr); 27 int len=strlen(arr); 28 func(arr,len); 29 printf("%d %s\n",len,arr); 30 return 0; 31 }错误在哪里
时间: 2024-03-07 13:50:02 浏览: 123
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码存在几个问题:
1. 第11行的`char *q=p+len;`将`q`指针指向了`p`指针+len的位置,但是`p`指针本身没有移动,因此在后面的操作中,`q`指针会越界。
2. 第12行的`char *k=NULL;`将`k`指针初始化为`NULL`,但在第15行中却试图访问`*k`,这是会导致段错误的。
3. 在第19行中,`k`指针已经指向了字符串的结尾,但在第20行中,将`p`指向了`k`,并没有改变字符串内容,因此第29行输出的字符串仍然是原来的字符串。
以下是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
void func(char *p, int len)
{
char *q = p + len - 1; // 修改1:将q指针指向p+len-1的位置
char *k = p; // 修改2:将k指针初始化为p指针
for(int i = 0; i < len; i++)
{
*k = *q;
k++;
q--;
}
*k = '\0';
}
int main(int argc, char *argv[])
{
char arr[32] = {0};
gets(arr);
int len = strlen(arr);
func(arr, len);
printf("%d %s\n", len, arr);
return 0;
}
```
此时,代码应该可以正确输出反转后的字符串。
阅读全文