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 *s="abcd" 有什么问题? 谢谢!:)

错误消息完全不言自明。不清楚你不明白的是什么。例如,在您的 join 函数中,如果两个字符串的总长度超过 255 个字符,就会发生可怕的事情。

此外,您的 join 功能已完全损坏。它 returns 一个指向缓冲区的指针,一旦它 returns 就不再存在,因为您将它分配到要返回的堆栈上。

那是 your implementation trying to be helpful

您可以通过在代码顶部添加以下 #define 来阻止它这样做

#define _CRT_SECURE_NO_WARNINGS

或按照建议使用strcat_s()

第一条消息是因为 strcat 不检查目标存储是否足够大以容纳连接的字符串。您可能会遇到缓冲区溢出。 strcat_s 有一个附加参数,即缓冲区长度。它将确保没有缓冲区溢出。

关于你的第二个问题,join()中的代码是伪造的。 您所做的是声明一个局部变量,它是一个 256 个字符的数组。作为局部变量,当 join() 终止时它将是 "destroyed"。
然后将 s1 复制到此缓冲区中。请注意,缓冲区可能太小而导致缓冲区溢出。

然后你用局部变量 buffer 作为第一个参数调用 strcat。结果是 s2 将附加到局部变量缓冲区中的 s1strcat 的值 return 是缓冲区上的指针。 当join()returns时,缓冲区为"destroyed",指针失效。

请注意,您代码中的另一个问题是在 main 中声明函数 join()。您必须将此行移出 main 函数。

您定义结构和字符串变量的方式是正确的。你执行 join() 的方式是假的。