[英]Segmentation Fault while trying to reverse string in C
我是 C 的新手,遇到了一些问题。 我试图反转 C 中的给定字符串,并且在执行此操作时以某种方式出现分段错误
#include <stdio.h>
#include "my_revstr.h"
int my_strlen(char const str[]){
int i = 0;
int count = 0;
while (str[i] != '\0'){
count++;
i++;
}
return count;
}
void my_revstr(char str[]) {
int len = my_strlen(str);
char temp;
char* ptr = str;
char test;
for (int i = 0 ; i < len /2; i++) {
ptr += ptr[i];
str[i]= str[(len/2)-1];
}
printf("%s", str);
}
int main() {
my_revstr("ABCDE");
}
对于初学者,您可能不会更改字符串文字。
my_revstr("ABCDE");
任何更改字符串文字的尝试都会导致未定义的行为。
您需要声明一个由字符串字面量初始化的字符数组并将其传递给 function
例如
char s[] = "ABCDE";
my_revstr( s );
尽管如此,无论如何您的 function my_revstr
没有任何意义。
由于此语句,它所做的只是更改字符串的前半部分
str[i]= str[(len/2)-1];
而且这个说法
ptr += ptr[i];
可以调用未定义的行为。
您的函数可以如下所示
size_t my_strlen( const char *s )
{
size_t n = 0;
while ( s[n] ) ++n;
return n;
}
char * my_revstr( char *s )
{
for ( size_t i = 0, n = my_strlen( s ); i < n / 2; i++ )
{
char c = s[i];
s[i] = s[n - i - 1];
s[n - i - 1] = c;
}
return s;
}
主要是你可以写
int main( void )
{
char s[] = "ABCDE";
puts( s );
puts( my_revstr( s ) );
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.