簡體   English   中英

C-strcat錯誤

[英]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功能完全被破壞。 它返回一個指向不再存在的緩沖區的指針,因為它是在您從其返回的堆棧上分配后分配的。

那就是您的實現試圖有所幫助的實現

您可以通過在代碼頂部添加以下#define來阻止此操作

#define _CRT_SECURE_NO_WARNINGS

或按照建議使用strcat_s()

第一條消息是因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM