相关疑难解决方法(0)

char s []和char*s有什么区别?

在C中,可以在声明中使用字符串文字,如下所示:

char s[] = "hello";
Run Code Online (Sandbox Code Playgroud)

或者像这样:

char *s = "hello";
Run Code Online (Sandbox Code Playgroud)

那么区别是什么呢?我想知道在编译和运行时的存储持续时间实际发生了什么.

c string constants char

495
推荐指数
6
解决办法
33万
查看次数

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

是否可以在C中修改字符串?

我用各种各样的C教程和与指针相关的书籍一直在苦苦挣扎几个小时,但我真正想知道的是,如果可以在创建一个char指针后更改它.

这是我尝试过的:

char *a = "This is a string";
char *b = "new string";

a[2] = b[1]; // Causes a segment fault

*b[2] = b[1]; // This almost seems like it would work but the compiler throws an error.
Run Code Online (Sandbox Code Playgroud)

那么有没有办法改变字符串内的值而不是指针地址?

谢谢

编辑:

谢谢大家的回答.现在更有意义了.特别有意义的是,为什么有时它工作正常而其他时候不工作.因为有时候我会传递一个char指针,有时会传递一个char数组(char数组工作正常).

c string debugging

65
推荐指数
6
解决办法
11万
查看次数

修改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
查看次数

增量运算符给出分段错误?

可能重复:
通过指针更改C中的字符串文字?

这是一个代码示例

void main()  
{

    char *i="prady";  printf("%c ",++*i); 
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么这个代码在gcc中给出了一个分段错误,我猜它应该给'q'.当我只使用*i++它给我结果但是预先增量只是它给我一个分段错误.

还告诉我为什么void main不是写main()函数的正确方法.

c

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