C-无法找到分割故障



我需要帮助的理解:

我正在尝试了解我遇到的细分错误:

分割故障(核心倾倒(

通过查看SO和Google,这似乎与尝试访问内存有关,代码在某些范围中无法访问。但是,我似乎无法弄清楚它发生在哪里。

我要做的(期望(:

我正在以C编程语言进行关注,并正在尝试解决练习2.4:squeeze(s1, s2)-删除S2中S2中的所有字符实例。

我尚未涉及动态数组等,因此我只能使用简单的,原始的数据类型来"能够"(以最轻度的含义(。我有更高级别的语言的经验!

我做了什么:

我在Windows 10机器上运行Cygwin,并且编译器(GCC(没有问题。

这是我为解决上述问题而编写的代码:

/*
    Exercise 2.4
    squeeze (s1, s2): Remove all characters of s2 in s1.
    INPUT : s1.length >= s2 > 0.
    OUTPUT: The rest of s1 after deleting all occurances of letters in s2.
*/
#include <stdio.h>
void squeeze (char s1[], const char *s2);  /* Returns (by-ref) the resulting string s1 after removing all occurences of s2. */
int toUpper(char c);                      /* returns the numerical representation of a hexadecimal digit. */
int main () {
    char s1[] = "I am a test.";
    const char *s2 = "AE";
    printf("Before manipulation: %sn", s1);
    squeeze(s1, s2);
    printf("After manipulation:  %s", s1);
}
/*
    Returns the (by-ref) resulting string s1 after removing all occurences
    of letters in s2.
*/
void squeeze (char s1[], const char *s2) {
    int index, s2_index, c = 0;
    while (s1[index] != '') {
        while(s2[s2_index] != '') {
            if ((c = toUpper(s1[index])) == s2[s2_index]){
                s1[index] = s1[index + 1];
            }
            s2_index++;
        }
        s2_index = 0;
        index++;
    }
}
/*
    Returns the upper-case representation of char c.
*/
int toUpper (char c) {
    if (c >= 'a' && c <= 'z')
        return c - 32;
    else
        return c;
}

欢呼!如果您有任何疑问或错过了什么,请随时发表评论!:(

感谢您的帮助!

从不在一行上写多个变量声明。这被认为是非常糟糕的练习,因为它更容易编写错误。(坏书可能会教这种风格,提防坏书。(

int index, s2_index, c = 0;

与更可读的

相同
int index;
int s2_index;
int c = 0;

正如我们可以从可读版本中看到的那样,您只需初始化一个变量为零即可。将代码更改为:

int index = 0;
int s2_index = 0;
int c = 0;

更好的是,您可以将循环删除到更可读的代码中:

for(size_t i1=0; s1[i1] != ''; i1++)
{
  for(size_t i2=0; s2[i2] != ''; i2++)
  {
    ...
  }
}

您可能会注意到,每次复制某些内容,而不是在循环中的每个圈子(?(。

您需要初始化indexs2_index

更改:

int index, s2_index, c = 0;

to:

int index = 0, s2_index = 0, c = 0;

相关内容

  • 没有找到相关文章

最新更新