代码:
#include <string.h>
//Return copy of str string from index position and len length
char *StrCpy2(char *str, unsigned short index, unsigned char len)
{
char *text;
text = (char *)malloc(sizeof(char)*(len+1));
if (text == NULL) return text;
strncpy(text, str + index, len);
text[len] = '\0';
return text;
}
关于此文件和行的控制台输出:
Compiling file: String.c
arm-none-eabi-gcc -c -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -std=gnu99 -g -ggdb3 -fverbose-asm -Wa,-ahlms=out/String.lst -DSTM32F40_41xxx -DUSE_STM324x7I_EVAL -MD -MP -MF out/String.d -I. -IBACnet/inc -IBACnet/inc/objects -Iinc -Ilib/drivers/inc -Ilib/eval -IUI/inc -IuIP/inc String.c -o out/String.o
String.c: In function 'StrCpy2':
String.c:39:2: warning: implicit declaration of function 'strncpy' [-Wimplicit-function-declaration]
strncpy(text, str + index, len);
^
String.c:39:2: warning: incompatible implicit declaration of built-in function 'strncpy'
String.c:39:2: note: include '<string.h>' or provide a declaration of 'strncpy'
我感到很遗憾,因为在从stm32f1移植到stm32f4期间出现了问题,并且将源代码工具链转换为出血边缘工具链(this one)。如你所见,我已经包含了。也许有些#defines不正确?也许eclipse或系统中的某些路径是错误的?
答案 0 :(得分:1)
我几乎可以肯定,您的项目中有一个名为String.h
的文件。因为您在Windows上进行了编译,因为它不够智能,无法发现String.h
和工具链string.h
之间存在差异,所以行#include <string.h>
实际上包含了您的String.h
,你很可能没有这个声明。
如果您在Linux上编译它,它很可能会起作用,因为文件名的情况很重要。对于Windows,除了命名文件(尤其是标题)之外没有其他解决方案。我个人建议每个模块(标题+源)有一个全局函数,然后你可以在函数后命名模块。因此,在上述情况下,您有StrCpy2.h
和StrCpy2.c
。