C中字符串的一些问题

时间:2016-09-07 05:17:20

标签: c arrays string

我正在阅读C编程语言,问题2-4要求编写一个名为squeeze的函数来删除s1中s1中的所有char,所以我编写代码,但它根本无法运行。 / p>

这是我的代码

#include <stdio.h>

void squeeze(char s1[], char s2[]);

int main()
{
    squeeze("tabcdge", "abc");
}

void squeeze(char s1[], char s2[])
{
    int i, j, k;

    for (i = k = 0; s1[i] != '\0'; i++) {
        for (j = 0; s2[j] != '\0' && s2[j] != s1[i]; j++)
            ;
        if (s2[j] == '\0')
            s1[k++] = s1[i];
    }
    s1[k] = '\0';
    for (i = 0; s1[i] != '\0'; i++)
        printf("%c", s1[i]);
}

3 个答案:

答案 0 :(得分:1)

main中,您将字符串常量传递给squeeze。但是squeeze尝试使用s1[k++] = s1[i]之类的代码修改它们。你不能修改一个常数 - 这就是使它成为常数的原因。

答案 1 :(得分:0)

字符串文字(如"tabcdge"只读。尝试修改一个导致未定义的行为

答案 2 :(得分:0)

String constatns存储在只读内存中。正如@Joachim所说,修改它们(在你的情况下删除)是Undefined behaviour

我怀疑你的程序崩溃了。有关变量和常量存储的更多信息https://stackoverflow.com/a/18479996/3747770