我正在阅读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]);
}
答案 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