c**z 发帖数: 669 | 1 reverse a string
void reverse(char* str)
{
// check null
if ( str == NULL ) return;
char* end = str;
char temp;
while( *end != NULL )
end++;
end--;
while( str < end )
{
temp = *str;
*str = *end; // 这里每次都会垮掉
*end = temp;
str++;
end--;
}
} |
y***n 发帖数: 1594 | 2 我没有仔细看,但对C不熟的,尽量避免指针操作,用c++ string, 然后用i, j 来
index。
为什么java, c#, python, Ruby 都不让指针操作,是有原因的。。 |
l*********8 发帖数: 4642 | 3 while( *end != NULL )
改成 while(*end)
【在 c**z 的大作中提到】 : reverse a string : void reverse(char* str) : { : // check null : if ( str == NULL ) return; : char* end = str; : char temp; : while( *end != NULL ) : end++; : end--;
|
y***n 发帖数: 1594 | 4 这个就是功力了,一般真的不建议用 Raw C 来面,特别是一般的公司。。 |
Q****r 发帖数: 7340 | 5 你把'\0'也拿去翻转了
你的*end = '\0'
不明白你的垮掉是什么意思?难道你是说运行的时候跑飞了? |
c*******r 发帖数: 610 | 6 segmentation fault ?
【在 Q****r 的大作中提到】 : 你把'\0'也拿去翻转了 : 你的*end = '\0' : 不明白你的垮掉是什么意思?难道你是说运行的时候跑飞了?
|
c**z 发帖数: 669 | 7 能compile,但是run time will crash |
Q****r 发帖数: 7340 | 8 你run的时候是不是还printf这个 string了?
【在 c**z 的大作中提到】 : 能compile,但是run time will crash
|
l*********8 发帖数: 4642 | 9 void reverse(char *s) {
if (!s) return;
for (char *end = s+strlen(s)-1; s < end; ++s, --end)
swap(*s, *end);
}
【在 c**z 的大作中提到】 : reverse a string : void reverse(char* str) : { : // check null : if ( str == NULL ) return; : char* end = str; : char temp; : while( *end != NULL ) : end++; : end--;
|
l*********8 发帖数: 4642 | |
H**********5 发帖数: 2012 | 11 你的代码本身没问题,
我怀疑是你写测试时
将
char a[]=“12345”;
写成
char a*=“12345”;
导致常量字符被修改程序死掉的错误。
我刚才在VC6跑了你的代码没有问题
#include
#include
void reverse(char* str)
{
// check null
if ( str == NULL ) return;
char* end = str;
char temp;
while( *end != NULL )
end++;
end--;
while( str < end )
{
temp = *str;
*str = *end;// 这里每次都会垮掉
*end = temp;
str++;
end--;
}
}
main()
{
char a[]="12345";
reverse(a);
cout<
}
【在 l*********8 的大作中提到】 : 恩,应该是这个原因
|
y***n 发帖数: 1594 | |
y***n 发帖数: 1594 | 13 不用指针的。
void reverse(char s[]){
if (!s) return;
int c, i, j;
for(i = 0, j = strlen(s) - 1; i < j; i++, j--){
c = s[i];
s[i] = s[j];
s[j] = c;
}
} |