// ExampleCodes.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<iostream>
using namespace std;
char* stringReverse(char* s)
{
char temp, *p,*q;
q = s;
while( *(++q));
for( p = s; p < --q; p++)
{
temp = *p;
*p = *q;
*q = temp;
}
return s;
}
int _tmain(int argc, _TCHAR* argv[])
{
stringReverse("StringReverse");
return 0;
}
答案 0 :(得分:8)
您无法修改常量字符串文字。
stringReverse("StringReverse");
您可以改为使用字符数组:
char str[] = "StringReverse";
答案 1 :(得分:5)
不允许在C中修改字符串文字,如"StringReverse"
。使用数组:
char str[] = "StringReverse";
stringReverse(str);
请注意,如果您为stringReverse()
函数提供零长度字符串,则其{{1}}函数具有未定义的行为。
答案 2 :(得分:0)
你从未为p分配任何内存。您可以尝试p = new char[sizeof(s)];
答案 3 :(得分:0)
也许你应该这样写:
// in - string to reverse
// out - buffer for reversed string
// l - size of in
StringReverse(char* in, char* out, int l) {
for (int i=0;i<l;i++) {
out[l-(i+1)] = in[i];
}
}
* []和*(p ++)/ *(p - )
之间的速度差别很小甚至没有答案 4 :(得分:-1)
好吧,我打算清理OP中可怕的来源,但我只是发布一个更清洁的版本:
#include <stdio.h>
#include <string.h>
void reverse_string(char *s)
{
char *q = s + strlen(s);
for (char *p = s; p < --q; p++)
{
char temp = *p;
*p = *q;
*q = temp;
}
}
int main()
{
char s[] = "StringReverse";
reverse_string(s);
puts(s);
return 0;
}
我希望你能成为一名学生。
这实际上是纯粹的C,所以要从它的性能中学习和敬畏,但不要开始像这样编写C ++。