编译器不显示任何错误或警告,但程序不工作

标签 c pointers gcc compiler-errors compiler-warnings

<分区>

我尝试构建并运行以下程序,但它无法执行。我以为我可能犯了一个错误,但显示了 0 个错误和 0 个警告。

在研究了 stackoverflow 上的此类行为后,我主要看到一些放错地方的分号或忘记的地址运算符,我在这个源代码中没有看到这些,或者我忽略了什么? 某些 C 或 GCC 大师可以告诉我哪里出了问题以及为什么吗?

操作系统是Windows 7,并且编译器已经启用: -pedantic -w -Wextra -Wall -ansi

这是源代码:

#include <stdio.h>
#include <string.h>

char *split(char * wort, char c)
{
    int i = 0;
    while (wort[i] != c && wort[i] != '\0') {
        ++i;
    }
    if (wort[i] == c) {
        wort[i] = '\0';
        return &wort[i+1];
    } else {
        return NULL;
    }
}


int main()
{
    char *in = "Some text here";
    char *rest;
    rest = split(in,' ');
    if (rest == NULL) {
        printf("\nString could not be devided!");
        return 1;
    }
    printf("\nErster Teil: ");
    puts(in);
    printf("\nRest: ");
    puts(rest);
    return 0;
}

预期的行为是字符串“Some text here”在其第一个空格处拆分,预期的输出为:

Erster Teil: Some

Rest: text here

最佳答案

您正在修改字符串文字,这是未定义的行为。改变这个

char* in = "Some text here";

char in[] = "Some text here";

这使得 in 成为一个数组并用 "Some text here" 初始化它。您应该使用 const 来防止在定义指向字符串文字的指针时意外出现此错误。

关于编译器不显示任何错误或警告,但程序不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060341/

相关文章:

c - 编译 C 代码时,如何指定要从 .so 库导出的函数?

c++ - 为了在 C++ 中易于使用,使用引用而不是指针的合理性如何?

c - 多个 GCC 版本导致多个堆,导致崩溃?

c++ - Ubuntu 20.04 中未找到 io.h CLion

c - 无法识别溢出,p 未打印警告

c - 重新分配 x86 x86_64

c - 在for循环中初始化变量(圆括号内)和在for循环之前初始化变量有什么区别吗?

C++排序数组是指向类的指针

fprintf() 的跨平台宏包装器

c - C语言如何在一个字符串中插入多个字符