#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
string a = "bob";
string b = "steve'";
for (int c = 0, n = strlen(b); c < n; c++)
{
a[c] = b[c];
if (a[c] == '\0')
{
a[c+1] = '\0';
a[c] = b[c];
}
if (b[c] == '\0')
{
a[c] = '\0';
break;
}
}
printf("%s", a);
}
错误发生在第一行表示a[c] = B[c]的行,或者第12行代码。代码的目的是尝试将字符串a更改为字符串B。然而,似乎我不能使数组的两个字符相等。有什么办法可以做到吗?
为了使这些字符串相同,我只是尝试使它们的字符相等。这导致了分段故障(核心转储)。
1条答案
按热度按时间bweufnob1#
对于初学者来说,似乎有一个错字
然而,指针
a
和b
声明为其中名称
string
是类型char *
的别名,指向字符串文字"bob"
和"steve"
。在这个for循环中
你正在尝试改变一个字符串文字。任何更改字符串文字的尝试都会导致未定义的行为。此外,在if语句中
你甚至试图在内存中写入字符串字面量之外的内容。
来自C标准(6.4.5字符串文字)
7如果这些数组的元素具有适当的值,则未指定这些数组是否是不同的。如果程序试图修改这样的数组,则行为未定义。
你需要声明至少一个字符数组来代替指向字符串的指针,字符串将被复制到这个数组中。
例如你可以写