#嵌入式 常用C庫函數(shù)。

C語言常用庫函數(shù)。

%#x 所以c語言中的%#x意思是帶格式0x的16進制輸出。

memset 初始化函數(shù),將某一刻內(nèi)存中的全部設(shè)置為指定的值。
void* memset(void s, int c, size_t n);
s: 指向要填充的內(nèi)存塊。
c: 要被設(shè)置的值
n: 要被設(shè)置該值的字符數(shù)
返回類型是一個指向存儲區(qū)s的指針。
memset(buf, 0, uLen + 1);
// 拷貝n個字節(jié)到dest
void
memcpy(void* dest, void* src, int n)

//檢測不可信的數(shù)據(jù),數(shù)據(jù)可能沒'\0'結(jié)尾,為避免一直掃描,設(shè)置掃描邊界。
int len = strnlen(str, bufLen-1);
int len = strlen(str); // char* 字符串長度獲取
// 復(fù)制字符串的庫函數(shù)
char *strcpy(char *dst, const char *src);
// 將源字符串的一部分復(fù)制到目標(biāo)字符串中。
char *strncpy(char *dest, const char *src, size_t n)
// 比較字符串1,2 前n個字符
if (0 == strncmp("http://", sLine, 2)) // 注釋的一行。
int strncmp(char *str1, char *str2, int n)
// 字符串分割函數(shù)(取分個字符前面的內(nèi)容),str為NULL表示從上次分割的位置,繼續(xù)分割。
char *strtok(char *str, const char *split);
// 格式化輸出, 輸出結(jié)果到str中。
int sprintf(char str, const charformat, ...);
// 格式化指定長度size到str中,超出截取前面size-1,然后加上'\0'.
int snprintf(char str, int size, char format, ...);
// 兩個字符串連接
char *strcat(char dest, const char src)

// 發(fā)送格式化內(nèi)容 filename 中
sprintf(filename,"/sys/class/gpio/gpio%d/value", bank*8+gio_num);
fprintf(filename, "[Error]%s(%d): ioctl ret =%d\n", FUNCTION, LINE, ret);
INFO("Compiled at %s %s", DATE, TIME);

// 從fp文件指針,讀取指定字節(jié)數(shù)據(jù)到buf。每次讀取字節(jié)數(shù)*讀取次數(shù)。
fread(buf, sizeof(char), sizeof(buf) - 1, fp);
// 格式化打印輸出
printf("%d %d \n", buf[0],buf[1]);

// 查找字符串s中首次出現(xiàn) c字符的位置。返回的是c首次出現(xiàn)位置的指針。
char strchr(const chars, char c);
// 字符c在字符串中最后一次出現(xiàn)的位置,沒找到返回NULL。
char strrchr(const chars, char c)

fwrite 將數(shù)據(jù)從內(nèi)存中寫入到文件中,
write(buf, size, count, fp);
write(fd, buf, 2);

int fineno(FILE *stream); // 獲取文件流使用的文件描述詞

fsync函數(shù):僅對文件描述符指定的單一文件起作用,且等待磁盤操作結(jié)束,在返回。
perror(char * str); // 輸出錯誤原因。
fseek(File* fb, long offset, int fromWhere); // 文件指針定位到指定的位置

snprintf

sprintf不能檢查目標(biāo)字符串的長度,可能造成眾多安全問題,所以都會推薦使用snprintf.
函數(shù)說明:

最多從源串中拷貝size-1個字符到目標(biāo)串中,然后再在后面加一個0。所以如果目標(biāo)串的大小為size的話,將不會溢出。
函數(shù)返回值:
若成功則返回欲寫入的字符串長度,若出錯則返回負值。
在snprintf(dest, size, "str: %s\n", src)中如果size-1大于等于"str: %s\n"的長度,
則把"str: %s\n"都拷貝到dst; 如果size-1小于"str: %s\n"的長度,
則從"str: %s\n"拷貝size-1長度的字符串到dst,并且末尾置\0.
就是說,拷貝的長度是size-1和源字符串長度的最小值;
char test[8];int ret= snprintf(test,5,"1234567890"); printf("%d|%s\n",ret,test);
運行結(jié)果為:
10|1234

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容