【问题标题】:strcat() has a problem in xcode using gccstrcat() 在使用 gcc 的 xcode 中有问题
【发布时间】:2019-11-10 16:04:46
【问题描述】:

如果我在 strcat() 的高度使用 XCode 编译,则会返回以下错误:

Thread 1: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP, subcode = 0x0)

如果我从终端(gcc -Wall program.c -o Out)编译:

Illegal instruction: 4   
  • lung2s2 的长度。
  • MAX 等于 30 并且是数组的最大长度。

代码如下:

    char s1[MAX] = { '\0' };
    char s2[MAX] = { '\0' };
    int flag = 0;
    char *ptr;
    unsigned long int lung1, lung2 = 0;
    int verifica = 0;
    j = 0;

    ...

    while (j < lung1) {
        ptr = strstr(s1, s2);
        if (ptr) {
            strncpy(ptr, "*", lung2);
            strcat(s1, ptr + lung2);
            flag = 1;
        } else {
            j++;
        }
    }

【问题讨论】:

  • 如果我没看错,你的strncpy 电话说你是说要复制零个字符? lung2,就像他们得到的一个神秘的变量名一样,被分配了0,并且从未改变过。
  • 这个例子还远未完成。哪一行导致崩溃,你确定它在这个块中吗?你传递的指针是什么?它们是否在任何已定义数组的范围内? MAX 是什么?我的问题比答案多得多。

标签: c xcode gcc


【解决方案1】:

代码用星号* 替换s1 中每次出现的s2

在某些平台上,如果源和目标重叠,strcat 的行为是未定义的,因为ptr 指向s1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2011-11-07
    相关资源
    最近更新 更多