该程序接受一个指向char数组的指针和一个int.字符数组由两个用空格分隔的数字组成.
该函数的用法是将char数组的值读取为int‘s,并用输入的相乘的值替换它们:
void read_and_mul(char * arr,int scale) {
int num_arr[2]; // saving values in a int[]
char * ch = strtok(arr," ");
num_arr[0] = scale * (atoi(ch));
ch = strtok(NULL," ");
num_arr[1] = scale * (atoi(ch));
memset(arr,0,sizeof(arr)); // deleting the previous value of the char[]
char one[sizeof (int)];
char two[sizeof (int)];
sprintf(one,"%d",num_arr[0]); // saving the altered numbers as chars
sprintf(two,"%d",num_arr[1]);
strcat(arr,one); // writing the multiplied values to the string
strcat(arr, " ");
strcat(arr,two);
}
无论如何,我这样使用它,它按预期工作,但会导致堆栈崩溃:
int main(int argc, char *argv[]) {
char str[] = "1 2";
read_and_mul((char *) &str, 10);
printf("string after call: %s\n",str);
return 0;
}
Clion中的终端消息为:
*** stack smashing detected ***: terminated
string after call: 10 20
这是一个潜在的错误还是ide警告,是什么导致的?