error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
当我手动测试我的程序时,它编译并运行良好,但是当我尝试在终端中使用自动分级器时,我收到此错误。我是 C 的新手,不明白它的含义以及如何修复它。
我的代码:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, char* argv[]){
char *s = (char *)malloc(sizeof(char) * 100);
char prev = argv[1][0];
if(isdigit(prev)!=0){
printf("%s","ERROR");
return 0;
}
int count = 1;
for(int i=1; i<strlen(argv[1]); i++){
if(isdigit(argv[1][i])!=0){
printf("%s","ERROR");
return 0;
}
if(prev==argv[1][i]){
count++;
}else{
sprintf(s, "%s%c%d", s, prev, count);
count = 1;
}
prev=argv[1][i];
}
sprintf(s, "%s%c%d", s, prev, count);
if(strlen(s) > strlen(argv[1])){
printf("%s\n", argv[1]);
}else{
printf("%s\n", s);
}
free(s);
}
不允许将字符串 sprintf 到自身。也就是说,当 s
也是目标时,您不能将字符串 s
作为源参数之一传递给 sprintf
。
例如,请参阅 cppreference,在注释下:
The C standard and POSIX specify that the behavior of sprintf and its variants is undefined when an argument overlaps with the destination buffer. Example:
sprintf(dst, "%s and %s", dst, t); // <- broken: undefined behavior
您需要想出一种不同的方法来将所需的字符和数字连接在一起。
当我手动测试我的程序时,它编译并运行良好,但是当我尝试在终端中使用自动分级器时,我收到此错误。我是 C 的新手,不明白它的含义以及如何修复它。
我的代码:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, char* argv[]){
char *s = (char *)malloc(sizeof(char) * 100);
char prev = argv[1][0];
if(isdigit(prev)!=0){
printf("%s","ERROR");
return 0;
}
int count = 1;
for(int i=1; i<strlen(argv[1]); i++){
if(isdigit(argv[1][i])!=0){
printf("%s","ERROR");
return 0;
}
if(prev==argv[1][i]){
count++;
}else{
sprintf(s, "%s%c%d", s, prev, count);
count = 1;
}
prev=argv[1][i];
}
sprintf(s, "%s%c%d", s, prev, count);
if(strlen(s) > strlen(argv[1])){
printf("%s\n", argv[1]);
}else{
printf("%s\n", s);
}
free(s);
}
不允许将字符串 sprintf 到自身。也就是说,当 s
也是目标时,您不能将字符串 s
作为源参数之一传递给 sprintf
。
例如,请参阅 cppreference,在注释下:
The C standard and POSIX specify that the behavior of sprintf and its variants is undefined when an argument overlaps with the destination buffer. Example:
sprintf(dst, "%s and %s", dst, t); // <- broken: undefined behavior
您需要想出一种不同的方法来将所需的字符和数字连接在一起。