给定一个指向字符串文字的指针数组:
char *textMessages[] = {
"Small text message",
"Slightly larger text message",
"A really large text message that "
"is spread over multiple lines"
}
Run Code Online (Sandbox Code Playgroud)
如何确定特定字符串文字的长度 - 比如第三个?我尝试使用sizeof命令如下:
int size = sizeof(textMessages[2]);
Run Code Online (Sandbox Code Playgroud)
但结果似乎是数组中指针的数量,而不是字符串文字的长度.
在更好地了解所给出的答案,希望这个帖子,可以有人请向我解释,如果下面的循环缓冲区的实现是可能的,如果没有,为什么没有.
#define CB_TYPE_CHAR 0
#define CB_TYPE_FLOAT 1
...
typedef struct CBUFF
{
uint16 total; /* Total number of array elements */
uint16 size; /* Size of each array element */
uint16 type; /* Array element type */
uint16 used; /* Number of array elements in use */
uint16 start; /* Array index of first unread element */
void *elements; /* Pointer to array of elements */
} CBUFF;
...
void cbRead(CBUFF *buffer, void *element)
{
if (buffer->type == …
Run Code Online (Sandbox Code Playgroud) 鉴于希望从其内容中抽象出循环缓冲区的结构,并从以下代码段开始(由此维基百科条目提供):
typedef struct
{
int value;
} ElemType;
typedef struct
{
int size; /* total number of elements */
int start; /* index of oldest element */
int count; /* index at which to write new element */
ElemType *elements; /* vector of elements */
} CircularBuffer;
void cbInit(CircularBuffer *cb, int size) {
cb->size = size;
cb->start = 0;
cb->count = 0;
cb->elements = (ElemType *)calloc(cb->size, sizeof(ElemType));
}
Run Code Online (Sandbox Code Playgroud)
如何抽象元素类型,以便在定义CircularBuffer的实例时指定它?我到目前为止的尝试如下:
CircularBuffer *cbInit(uint16 size, void *element)
{
CircularBuffer *buffer;
buffer …
Run Code Online (Sandbox Code Playgroud) 我有一个软件模块,包含*.h文件和*.c文件.变量和函数声明位于*.h文件中,而函数定义位于*.c文件中.模块中的两个函数是辅助函数,不能在模块外部使用.
使模块用户明白这一意图的最佳方法是什么?
我尝试声明函数static
,但是在*.h文件中这样做会导致GCC编译器警告函数是"声明为静态但从未定义".即使*.c文件使用该#include
指令包含*.h文件,*.h和*.c文件如何被视为不同的翻译单元?
是否有解决此问题的方法,不涉及放置static
*.c文件中的函数声明及其定义?虽然这个解决方案没有工作,它打破了我认为是保持在头文件中的声明和定义在实现文件的好习惯.