C字符串函数错误

C string functions error

我正在做作业,但我的代码有问题:

int is_ascii_match(const char c1[], const char c2[], char res[MAX_STRING_SIZE]) {
....

    if (val_c1 == val_c2) {
        strcpy(res, strcat(strcat(c1, '&'),c2));
    }
    else
        return 0;

我收到一个错误:

Access violation reading location

我是不是传错了参数还是..?

strcat 需要一个非常量 char*。你传递了一个 const 这就是编译器抱怨的原因。

第二个参数也是"&"。 (之前你通过了 char)。

来自标准 §7.24.3.1

char *strcat(char * restrict s1, const char * restrict s2);

The strcat function appends a copy of the string pointed to by s2 (including the terminating null character) to the end of the string pointed to by s1.

因此 s1 将被修改(第一个参数),这就是为什么它应该是非常量的原因。

'&'是字符字面量,是一个小整数。 strcat 的第二个参数是 const char*,它是一个指向字符的指针(更准确地说,是指向 char 的连续 NUL 终止数组中第一个字符的指针)。 您可能想要 "&",这是一个双字节数组。

尝试将小整数解释为指针会导致错误所指示的问题。

如果不是读取第二个参数的问题,当 strcat 试图修改其第一个参数指向的字符串时,您可能会遇到错误,即 const 和因此可以想象在只读存储器中。 (修改第一个参数似乎在语义上也不正确。)

如果您在启用警告的情况下进行编译,您应该会看到有关参数类型的警告。

对于这个特殊问题,考虑使用 snprintf(res, MAX_STRING_SIZE, "%s&%s", c1, c2),它避免修改 c1 并防止缓冲区溢出。 (如果您关心截断,您应该将 return 值与 MAX_STRING_SIZE 进行比较。)