问题描述
char *my_revstr(char *str)
{
int i = 0;
int j = 0;
int k = 0;
while(str[j] != '\0') {
j++;
}
j--;
while(i < j) {
k = str[i];
str[i] = str[j];
str[j] = k;
i++;
j--;
}
return (str);
}
但是,每当我尝试运行它时,我都会遇到细分错误,并且说实话,我也不知道为什么。我希望有人可以帮助我解决此问题^^。
解决方法
我确定由于将类似的字符串文字传递给函数而导致分段错误
> install.packages("~/Downloads/data.table-master.zip")
Warning message:
package ‘~/Downloads/data.table-master.zip’ is not available (for R version 3.6.3)
您不得更改字符串文字。任何更改字符串文字的尝试都会导致未定义的行为。
你应该这样写
my_revstr( "Hello" );
请注意,变量i和j的类型应为char s[] = "Hello";
my_revstr( s );
,因为类型size_t
的大小可能不足以存储字符串的大小。
例如,可以通过以下演示程序中所示的以下方式定义该功能,
int
程序输出为
#include <stdio.h>
char * my_revstr( char *s )
{
size_t n = 0;
while ( s[n] != '\0' ) ++n;
if ( n != 0 )
{
for ( size_t i = 0; i < --n; ++i )
{
char c = s[n];
s[n] = s[i];
s[i] = c;
}
}
return s;
}
int main(void)
{
char s[] = "Hello";
puts( s );
puts( my_revstr( s ) );
return 0;
}
例如也可以通过以下方式定义功能
Hello
olleH
或者您可以使用指针来实现该功能。例如
char * my_revstr( char *s )
{
size_t n = 0;
while ( s[n] != '\0' ) ++n;
for ( size_t i = 0; i < n / 2; ++i )
{
char c = s[i];
s[i] = s[n - i - 1];
s[n - i - 1] = c;
}
return s;
}