當我手動測驗我的程式時,它可以編譯并且作業正常,但是當我嘗試在終端中使用自動分級器時,我收到此錯誤。我是 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);
}
uj5u.com熱心網友回復:
不允許將字串 sprintf 用于自身。也就是說,您不能將字串s作為源引數之一傳遞給sprintfwhens也是目標。
參見例如cppreference,在注釋下:
C 標準和 POSIX 指定當引數與目標緩沖區重疊時 sprintf 及其變體的行為是未定義的。例子:
sprintf(dst, "%s and %s", dst, t); // <- broken: undefined behavior
您需要想出一種不同的方法來將所需的字符和數字連接在一起。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314977.html
上一篇:C 指標和記憶體分配
