在特定位置将字符串添加到字符数组,从而在 C 编程中导致缓冲区溢出
adding string to character array at specific position giving buffer overflow in c programming
我是 c 编程的新手,为了完成一项学校作业,我需要编写一个程序,将字符串作为输入,并在每个以辅音字母开头的单词前添加字母“ay”单词。暗示这应该用 strncpy 和 strcat 来完成。
这是我写的代码:
#include <stdio.h>
#include <string.h>
int main()
{
char myString[50];
char abc[26] = "bcdfghjklmnpqrstvwxyz";
char strA[50];
char strB[50];
char strC[150];
char ay[3] = "ay";
printf("** Welcome to the Double Dutch game **\nPlease enter a string: ");
scanf(" %[^\n]s", &myString);
int i, j;
for (i=0; myString[i]!='0'; i++) {
for(j=0; abc[j]!='[=10=]'; j++) {
if(abc[j] == myString[i]){
if(myString[i-1] == ' '){
strncpy(strC, &myString[0], i);
strncpy(strB, &myString[i], 40);
strcat(strC, ay);
strcat(strC, strB);
myString[0] = '[=10=]';
strcat(myString, strC);
strC[0] = '[=10=]';
strB[0] = '[=10=]';
}
}
}
}
printf("Result: %s", myString);
}
当我 运行 这段代码时,它一直给出错误 * Buffer overlow detected *: /home/a.out terminated。我找不到我犯的错误。希望有人能帮助我。
谢谢
改变这个:
scanf(" %[^\n]s", &myString);
对此:
scanf(" %[^\n]", myString);
因为 %[^\n]
转换修饰符不是 %s
的修饰符,它们是独立的。因此,您可以丢弃它。
提示:添加数组的大小 - 1,以防止可能的缓冲区溢出,如下所示:scanf(" %49[^\n]", myString);
我是 c 编程的新手,为了完成一项学校作业,我需要编写一个程序,将字符串作为输入,并在每个以辅音字母开头的单词前添加字母“ay”单词。暗示这应该用 strncpy 和 strcat 来完成。
这是我写的代码:
#include <stdio.h>
#include <string.h>
int main()
{
char myString[50];
char abc[26] = "bcdfghjklmnpqrstvwxyz";
char strA[50];
char strB[50];
char strC[150];
char ay[3] = "ay";
printf("** Welcome to the Double Dutch game **\nPlease enter a string: ");
scanf(" %[^\n]s", &myString);
int i, j;
for (i=0; myString[i]!='0'; i++) {
for(j=0; abc[j]!='[=10=]'; j++) {
if(abc[j] == myString[i]){
if(myString[i-1] == ' '){
strncpy(strC, &myString[0], i);
strncpy(strB, &myString[i], 40);
strcat(strC, ay);
strcat(strC, strB);
myString[0] = '[=10=]';
strcat(myString, strC);
strC[0] = '[=10=]';
strB[0] = '[=10=]';
}
}
}
}
printf("Result: %s", myString);
}
当我 运行 这段代码时,它一直给出错误 * Buffer overlow detected *: /home/a.out terminated。我找不到我犯的错误。希望有人能帮助我。 谢谢
改变这个:
scanf(" %[^\n]s", &myString);
对此:
scanf(" %[^\n]", myString);
因为 %[^\n]
转换修饰符不是 %s
的修饰符,它们是独立的。因此,您可以丢弃它。
提示:添加数组的大小 - 1,以防止可能的缓冲区溢出,如下所示:scanf(" %49[^\n]", myString);