1. 程式人生 > >strcpy/strncpy/sprintf/_snprintf/snprintf的區別

strcpy/strncpy/sprintf/_snprintf/snprintf的區別

1. char *strcpy(char *str1, char *str2); 串拷貝

#include <stdio.h>
#include <string.h>
int main(void)
 {
    char string[10];
    char *str1 = "abcdefghi";
    strcpy(string, str1);
    printf("%s\n", string);
    return 0;
 }

評:不是安全的,如果str1的長度超過string的長度,將陣列越界


2.char *strncpy(char *destin, char *source, int maxlen);串拷貝

#include <stdio.h>
#include <string.h>
int main(void)
{
   char string[10];
   char *str1 = "abcdefghi";
   strncpy(string, str1, 3);
   string[3] = '\0';
   printf("%s\n", string);
   return 0;
}

評:邊界安全的函式,拷貝時指定大小,不會溢位。

3.int sprintf(char *string, char *farmat [,argument,...]); 送格式化輸出到字串中

#include <stdio.h>
#include <math.h>
int main(void)
{
   char buffer[80];
   sprintf(buffer, "An approximation of Pi is %f\n", M_PI);
   puts(buffer);
   return 0;
}
評:可能邊界越界,如果格式化串大於80

4.snprintf(szTarget , sizeof(szTarget) , "%s" , szSource);

以&szTarget[0]為起始地址,把szSource的前19個位元組copy進去,將szTarget[20]賦值為0;

5. _snprintf 用在windows 平臺下,用法和snprintf一樣

相關推薦

strcpy/strncpy/sprintf/_snprintf/snprintf區別

1. char *strcpy(char *str1, char *str2); 串拷貝 #include <stdio.h> #include <string.h> int main(void) { char string[10];

printf、fprintf、sprintfsnprintf 區別

大小 添加 void std 格式化字符串 指定 stdlib.h () div 都是把格式好的字符串輸出,只是輸出的目標不一樣: 1 printf,是把格式字符串輸出到標準輸出(一般是屏幕,可以重定向)。 2 sprintf,是把格式字符串輸出到指定字符串中,所以參數比p

strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、區別和效率

1、 strcpy strcpy 是依據 /0 作為結束判斷的,/0會被拷貝。如果 to 的空間不夠,則會引起 buffer overflow。strcpy 常規的實現程式碼如下(來自 OpenBSD 3.9): char *strcpy(char *to,

strcpystrncpy與memcpy的區別與使用方法

flow class created 行為 ons return sizeof creat 數組 今天做題用到了這兩個函數,不是很懂,學習了下~ 轉自http://www.cnblogs.com/houjun/p/4913216.html 本文參考《C 標準庫》編寫。

strcpysprintf、memcpy的區別

使用 orm des 內存拷貝 font 行數據 現在 mat 空間 char*strcpy(char *dest, const char *src); 其對字符串進行操作,完成從源字符串到目的字符串的拷貝,當源字符串的大小大於目的字符串的最大存儲空間後,執行該操作會出現段

面試題10——簡述strcpysprintf,memcpy的區別

三者主要有一下不同之處: (1)操作物件不同: strcpy的兩個操作物件均是字串 sprintf的操作源物件可以是多種資料型別,目的操作物件是字串 memcpy的兩個物件就是兩個人一可操作的記憶體地址,不限於何種資料型別。 (2)執行效率不同: memcpy最高,strcpy次之,spri

strcpysprintf和memcpy的區別.md

strcpy、sprintf和memcpy的區別 下面程式碼說明: #include <iostream> using namespace std; #include <string.h> void strcpyMethod() { /

strcpystrncpy和strncpy_s的區別

首先說下strcpy strcpy()是依據源串的\0作為結束判斷的,不檢查copy先的Buffer的Size,如果目標空間不夠,就有BufferOverflow問題。 strncpy的原型為: char * strncpy(char *dest, cha

sprintfsnprintf函數

toc light view 提示 esp 如果 def 數組 oar printf()/sprintf()/snprintf()區別 先貼上其函數原型 printf( const char *format, ...) 格式化輸出字符串,默認輸出到終端-----st

[轉載]Linux C 字符串函數 sprintf()、snprintf() 詳解

數組 test 不足 同時 逗號 itoa 表示 成了 nat 一、sprintf() 函數詳解 在將各種類 型的數據構造成字符串時,sprintf 的強大功能很少會讓你失望。 由於 sprintf 跟 printf 在用法上幾乎一樣,只是打印的目的地不同而已,前者打印到字

echo、print、printf 、sprintf之間的區別

1.echo函式:輸出字串,返回型別為void; 2.print函式:輸出字串,返回型別為int;  echo(print "hello world!");    先輸出hello world 再輸出函式返回值 1;  echo(print "");   只輸出1;

字串函式 sprintf()、snprintf()

sprintf() 函式 (將各種型別的資料構造成字串)  sprintf ()跟 printf ()在用法上幾乎一樣,只是列印的目的地不同而已,sprintf ()會列印到字串中,printf ()則直接在命令列上輸出。 sprintf是個變參函式,定義如下: i

記憶體重疊之strcpy/strncpy/strcat/strncat和memcpy---我又踩到地雷了

       前面, 我們說過, strcpy是一個非常不安全的函式, 如果大家在專案中還在用strcpy, 那是不是應該反思一下呢?  於是, 有了更好的strncpy.          但是, 有一次, 我在用strncpy的時候,我覺得很自然啊, 卻犯了一個非常隱蔽

關於sprintfsnprintf的比較

#include <stdio.h> #include <string.h> typedef unsigned char uchar; #define BUF_SIZE 10 // 緩衝區大小 #define CLEAR_SIZE (B

memset+strcpy+strncpy的函式詳解以及字元陣列輸出的特殊情況

memset: 標頭檔案:#include在<string.h> 原型:   void *memset(void *s, int c, size_t n); 將已開闢記憶體空間的s所指向的每一塊記憶體中的每一個位元組全部設定為c為ASCII碼!!! The  m

C函式:strlen,strcat,strncat,strcmp,strncmp,strcpy,strncpy,strstr詳解

strlen() 原型:size_t strlen( const char *string ); 功能:計算給定字串的(unsigned int型)長度,不包括'\0'在內 說明:返回s的長度,不包括

C語言——常用標準輸入輸出函數 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字符串拷貝函數 strcpy(), strncpy(), strchr(), strstr()函數用法特點

文件 換行 strncpy 第一個 搜索字符串 標準輸入輸出 交流 一次 span 1 首先介紹幾個常用到的轉義符 (1) 換行符“\n”, ASCII值為10; (2) 回車符“\r”, ASCII值為13; (3) 水平制表符“\t”, ASCI

sprintfstrcpystrncpy及 memcpy 函式,請問這些函式功能有什麼區別?

這些函式的區別在於 實現功能 以及 操作物件 不同。 strcpy 函式操作的物件是 字串,完成 從 源字串 到 目的字串 的 拷貝 功能。 snprintf 函式操作的物件 不限於字串:雖然目的物件是字串,但是源物件可以是字串、也可以是任意基本型別的資料。這個函式主要用來實

strncpystrcpy區別

1. strcpy函式:顧名思義字串複製函式:原型:extern char *strcpy(char *dest,char *src); 功能:把從src地址開始且含有NULL結束符的字串賦值到以dest開始的地址空間,返回dest(地址中儲存的為複製後的新值)。要求:src和dest所指記憶體

sprintf、vsprintf、sprintf_s、vsprintf_s、_snprintf、_vsnprintf、snprintf、vsnprintf 函式辨析

看了題目中的幾個函式名是不是有點頭暈?為了防止以後總在這樣的細節裡糾纏不清,今天我們就來好好地辨析一下這幾個函式的異同。 實驗環境: Windows下使用VS2017Linux下使用gcc4.9.4   為了驗證函式的安全性我們設計瞭如下結構 const int len = 4; #