微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C 中编辑字符数组,输出被切断

如何解决在 C 中编辑字符数组,输出被切断

首先,我知道关于这个话题有很多问题。但是我已经搜索了很多并测试了我发现的类似问题的解决方案,但没有成功。

我想在调用 foo 时编辑一个字符数组,在调用 bar 时编辑另一个字符数组,但输出一直被切断(见下文)。

main.c

#include "struct.h"

static bool on = true;
static long val = 1;
static char first[15];
static char value[13];
static char second[15];

void foo(void)
{
    strcpy(first,(char*)hello); // first = "Hello "
    LongToStr(val,value);       // value = "1"
    Ltrim(value);
    Rtrim(value);
    strcat(first,value);        // first = "Hello 1"
    strcat(first,(char*)world); // first = "Hello 1 world"

    set(0,first);
}

void bar(void)
{
    on =! on;

    strcpy(second,(char*)fooBar);      // second = "fooBar "

    if (on)
        strcat(second,(char*)OnText);  // second = "fooBar on"
    else
        strcat(second,(char*)OffText); // second = "fooBar off"

    set(1,second);
}

int main()
{
    init();

    foo();
    printf("%s",get(0));

    foo();
    printf("%s",get(0));

    bar();
    printf("%s",get(1));

    bar();
    printf("%s",get(1));
}

struct.c

#include "struct.h"

static myStruct a[2];

void init(void)
{
    a[0].b = hello;
    a[1].b = fooBar;
}

void set(short pos,char* new)
{
    a[pos].b = new;
}

const char* get(short pos)
{
    return a[pos].b;
}

结构.h

void init(void);
void set(short pos,char* new);
const char* get(short pos);

typedef struct {
    const char *b;
} myStruct;

static const char hello[] = "Hello ";
static const char world[] = " world";
static const char fooBar[] = "fooBar ";
static const char OnText[] = "on";
static const char OffText[] = "off";

输出

1
1
on

说真的,我在这里错过了什么?

编辑: mikroC 内置函数的文档: strcpy Ltrim Rtrim LongToStr strcat

解决方法

通过不将 char 数组声明为常量来解决它(但不确定为什么)。

static char hello[] = "Hello ";
static char world[] = " world";
static char fooBar[] = "fooBar ";
static char OnText[] = "on";
static char OffText[] = "off";

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。