相关疑难解决方法(0)

修改C字符串常量?

可能重复:
为什么在写入字符串时会出现分段错误?

我想编写一个函数来反转传递给它的给定字符串.但是我不能.如果我doReverse使用字符数组提供函数(请参阅下面的代码),我的代码运行良好.

我无法弄清楚为什么这不起作用.我能够访问str[0]doReverse,但我不能用一个字符指针改变数组中的任意值.有任何想法吗?

void doReverse(char *str) {
    str[0] = 'b';
}

void main(void) {
    char *str = "abc";
    doReverse(str);
    puts(str);
}
Run Code Online (Sandbox Code Playgroud)

更新:

我知道如何通过将字符数组传递给它来编写反向函数:

void reverse1(char p[]) {
    int i, temp, y;

    for (i = 0, y = strlen(p); i < y; ++i, --y) {
        temp = p[y-1];
        p[y-1] = p[i];
        p[i] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想编写另一个获取char指针作为参数的版本.

c string pointers

12
推荐指数
4
解决办法
7772
查看次数

const char与char数组vs std :: string的指针

在这里,我有两行代码

const char * s1 = "test";
char s2 [] = "test";
Run Code Online (Sandbox Code Playgroud)

这两行代码具有相同的行为,所以我看不出是否应该优先选择s1,s2反之亦然.除了s1和s2之外,还有使用方式std::string.我认为使用std :: string的方式是最优雅的.在查看其他代码时,我经常看到人们use const char *或者char s [].因此,我现在的问题是,我应该何时使用const char * s1char s []std::string?有什么区别,我应该在哪种情况下使用哪种方法?

c++

9
推荐指数
2
解决办法
1万
查看次数

从字符串中删除空格 - 使用指针的In C风格

所以,它是一个非常简单的问题,我知道解决方案是一个简单的功能,如下所示:

  void removeSpaces(char* s) {
    char* source = s;
    char* dest = s;

    while(*source) {
        if(*source == ' ') {
            source++;
        } else {
            *dest++ = *source++;
        }
    }

    *dest = 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Visual C++ 2008 Express版

当我用以下内容调用它时,它可以正常工作,没有任何问题,即它删除所有空格:

int main() {
    char input[50] = "I       like            2% milk";
    removeSpaces(input);
    cout<<input;

    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,问题是当我通过将字符串声明更改为此来调用它时:

char * input = "I       like            2% milk";
Run Code Online (Sandbox Code Playgroud)

我得到一个例外(某种访问违规)

removeSpace函数的这行代码显示异常

*dest++ = *source++;
Run Code Online (Sandbox Code Playgroud)

任何人都可以详细说明为什么会发生这种情况?

c++ string pointers

3
推荐指数
1
解决办法
1931
查看次数

标签 统计

c++ ×2

pointers ×2

string ×2

c ×1