[英]C - Error with strcat
這段代碼有什么錯誤? 我有一個錯誤
error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead
這是什么意思? 另一個問題-結構和函數原型的聲明合法嗎?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char *join(char *, char *);
printf("%s \n", join("duck", "soup"));
}
char *join(char *s1, char *s2)
{
struct {
char buf[256];
} string;
string.buf = "abcd";\\ new line. error l-value.
return strcat(strcpy(string.buf, s1), s2);
}
新行-為什么會出現錯誤? string.buf
不是char指針嗎? char *s="abcd"
什么問題? 謝謝!:)
錯誤消息是完全不言自明的。 目前尚不清楚您不了解什么。 例如,在您的join
函數中,如果兩個字符串加在一起超過255個字符,則會發生可怕的事情。
此外,您的join
功能完全被破壞。 它返回一個指向不再存在的緩沖區的指針,因為它是在您從其返回的堆棧上分配后分配的。
第一條消息是因為strcat不會檢查目標存儲是否足夠大以容納串聯的字符串。 您可能會得到緩沖區溢出。 strcat_s
還有一個附加參數,即緩沖區長度。 它將確保沒有緩沖區溢出。
關於第二個問題, join()
的代碼是偽造的。 您要做的是聲明一個局部變量,該局部變量為256個字符的數組。 作為局部變量, join()
終止時將被“銷毀”。
然后,將s1
復制到此緩沖區中。 請注意,緩沖區可能太小,您將獲得緩沖區溢出。
然后,使用局部變量buffer作為第一個參數調用strcat
。 結果是將s2
附加到局部變量緩沖區中的s1
上。 strcat
返回的值是緩沖區上的指針。 當join()
返回時,緩沖區被“破壞”並且指針變為無效。
請注意,代碼中的另一個問題是在main內部聲明函數join()
。 您必須將此行移出主要功能。
定義struct和string變量的方式是正確的。 這是偽造join()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.