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
进行比较。)
我正在做作业,但我的代码有问题:
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 bys2
(including the terminating null character) to the end of the string pointed to bys1
.
因此 s1
将被修改(第一个参数),这就是为什么它应该是非常量的原因。
'&'
是字符字面量,是一个小整数。 strcat
的第二个参数是 const char*
,它是一个指向字符的指针(更准确地说,是指向 char
的连续 NUL 终止数组中第一个字符的指针)。
您可能想要 "&"
,这是一个双字节数组。
尝试将小整数解释为指针会导致错误所指示的问题。
如果不是读取第二个参数的问题,当 strcat
试图修改其第一个参数指向的字符串时,您可能会遇到错误,即 const
和因此可以想象在只读存储器中。 (修改第一个参数似乎在语义上也不正确。)
如果您在启用警告的情况下进行编译,您应该会看到有关参数类型的警告。
对于这个特殊问题,考虑使用 snprintf(res, MAX_STRING_SIZE, "%s&%s", c1, c2)
,它避免修改 c1
并防止缓冲区溢出。 (如果您关心截断,您应该将 return 值与 MAX_STRING_SIZE
进行比较。)