小编Bra*_*etz的帖子

建议使用模块化C应用程序的方法是什么?

我在Stack Overflow中读到,将C文件包含到另一个C文件中并不是最佳做法.我想知道如何在C中创建模块化应用程序.

我知道你建议包含的所有内容都是头文件,它不包含代码实现本身,只包含"函数调用".

编译器如何知道在哪里找到相应的代码?它会自动查找与.h文件同名的.c文件吗?

一般来说,如何在C应用程序中分离代码?

c

9
推荐指数
1
解决办法
301
查看次数

在字符数组结束前使用\ 0的安全性

我正在为一个嵌入式系统编写驱动程序,该系统运行自定义版本的修改后的linux(它是一个手工扫描器).制造商提供自定义Eclipse Juno发行版,其中包含一些库和示例入站.

我从comport收到的输出是标准字符数组的形式.我使用数组中的单个字符来传达信息(错误ID和错误代码),如下所示:

if (tmp[i] == 250])
Run Code Online (Sandbox Code Playgroud)

其中tmp是char形式的字符数组,tmp[500];首先被初始化为0然后填充来自comport的输入.

我的问题是:

假设我遍历数组的每一部分,在数组结束之前的任何时候使用0(如何\0)都是安全的吗?假设我是:

  1. 不将其视为字符串(迭代并像int数组一样使用它)
  2. 知道将要在那里发生什么,以及它中间的这个随机\ 0应该是什么意思.

我问的原因是因为我有几个同事告诉我,我不应该\0在结束之前使用包含的字符数组,无论情况如何.

我这样做的代码目前按预期执行,但我不确定它是否会在以后引起问题.

重写它以避免这种行为将是一件非常重要的工作.

c char

5
推荐指数
1
解决办法
83
查看次数

连接像printf一样的字符串

printf 是一个很棒的功能,因为它可以帮助您以非常干净的方式格式化字符串.

printf("Player %s has lost %d hitpoints", victim.name, damage);
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法连接和执行强制在"正常字符串",如下所示:

uint8_t myString = ("Player %s has lost %d hitpoints", victim.name, damage); //SOMETHING LIKE THIS
Run Code Online (Sandbox Code Playgroud)

c concatenation coercion

2
推荐指数
2
解决办法
5113
查看次数

将指针(字符串)传递给C函数

请在阅读结束之前说:"哦不,这个问题又来了......"

我现在正坐在C课程中,课程书中提供了以下示例:

#include <stdio.h>
#include <stdint.h>

void Terminal_PrintData(uint16_t * const Data);

int main(void){
    uint16_t StringData[] = "MyData";
    Terminal_PrintData(StringData);
}

void Terminal_PrintData(uint16_t * const Data)
{
    printf("Value: %s", *Data);
}
Run Code Online (Sandbox Code Playgroud)

当我编译这个杰作时,这就是我得到的:

F:\AVR Microcontroller>gcc -o test test.c
test.c: In function 'main':
test.c:7:26: error: wide character array initialized from non-wide string
  uint16_t StringData[] = "MyData";
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 声明一个字符串是否正确uint16_t
  • 将字符串传递给函数的推荐方法是什么?

c

0
推荐指数
1
解决办法
1295
查看次数

标签 统计

c ×4

char ×1

coercion ×1

concatenation ×1