【发布时间】:2016-02-15 10:45:38
【问题描述】:
我在函数trim 中编写了简单的函数来修剪文本中的空格。
它几乎可以工作。我有一个问题,因为它也应该更改原始字符串,但它没有。问题是什么?请描述。我很感激任何帮助。谢谢:)
代码:
#include <iostream>
#include <string.h>
using namespace std;
char* trim(char *str) {
while(*str==' '){
*str++;
}
char *newstr = str;
return newstr;
}
int main(){
char str[] = " Witaj cpp", *newstr;
cout << "start" << str << "end" << endl; // start Witaj cppend
newstr = trim(str);
cout << "start" << str << "end" << endl; // startWitaj cppend
cout << "start" << newstr << "end" << endl; // startWitaj cppend
return 0;
}
【问题讨论】:
-
我有一个问题,因为它也应该更改原始字符串,但它没有。 -- 您的函数不会更改任何内容,甚至不会尝试更改任何内容。它所做的只是返回一个指针。
-
那么我如何修改字符串而不返回它,只处理指针?
-
我认为你的意思是 'str++' 而不是 '*str++';那里没有deref!
-
@jawjaw 请重新考虑这件事。如果我将一个指向用
new []分配的char 的指针传递给你怎么办?你的函数(如果你让它工作),然后将指针移到我身上,现在当我调用delete [ ]时,指针已经改变,导致未定义的行为。无论如何,当您拥有std::string以及各种算法和字符串函数来执行此操作时,为什么要执行所有这些操作? -
char *newstr = str;和return newstr;的作用与return str;相同。你写的方式向我表明你正在积极尝试复制字符串,这不是这样做的方法。 (你需要strcpy)。
标签: c++ string pointers append