C程序打印垃圾字符
我的任务是用C编写一个程序,其功能类似于bash sed的's/oldstring/newstring/g',但只使用stdio.h和string.h。我们不能使用malloc,因为我们还没有在课堂上介绍它。程序必须继续接受用户输入,直到用户输入^D。我们使用GCC,因此我将其设置为使用可变长度数组,并且我已设法让程序在用户输入中查找并替换oldstring的单个实例。然而,有时程序会输出一些垃圾字符,我不知道为什么。我假设这是一个内存分配错误,或者程序正在读取我想要读取的内容。代码如下:C程序打印垃圾字符,c,gcc,C,Gcc,我的任务是用C编写一个程序,其功能类似于bash sed的's/oldstring/newstring/g',但只使用stdio.h和string.h。我们不能使用malloc,因为我们还没有在课堂上介绍它。程序必须继续接受用户输入,直到用户输入^D。我们使用GCC,因此我将其设置为使用可变长度数组,并且我已设法让程序在用户输入中查找并替换oldstring的单个实例。然而,有时程序会输出一些垃圾字符,我不知道为什么。我假设这是一个内存分配错误,或者程序正在读取我想要读取的内容。代码如下: #i
#include <stdio.h>
#include <string.h>
int isMatch(char * os, char * us){
int i;
char temp[strlen(os)];
for(i=0; i<strlen(us); i++){
int k=0;
for(int j=i; j<i+strlen(os); j++){
temp[k]=us[j];
k++;
}
if(strcmp(temp, os)==0){
return 1;
}
else{
return 0;
}
}
}
void replace(char * os, char * us, char * ns, int loc){
char out[strlen(us) - (strlen(os) - strlen(ns))];
int i;
for(i=0; i<loc; i++){
out[i]=us[i];
}
int k=0;
for(i=loc; i<loc+strlen(ns); i++){
out[i]=ns[k];
k++;
}
k=0;
for(i=loc+strlen(ns); i<strlen(us)-(strlen(os)-strlen(ns)); i++){
out[i]=us[loc+strlen(os)+k];
k++;
}
printf("%s\n", out);
}
int main(int argc, char * argv[]){
char input[100];
int i;
char c;
int match;
while(1){
if(scanf("%c", &c)==EOF){
break;
}
if((input[0]=c) != '\n'){
for(i=1; i<100; i++){
scanf("%c", &input[i]);
if(input[i]=='\n'){
break;
}
}
}
for(i=0; i<100; i++){
match = isMatch(argv[1], &input[i]);
if(match == 1){
replace(argv[1], input, argv[2], i);
}
if(input[i]=='\n'){
break;
}
}
}
}
#包括
#包括
int isMatch(char*os,char*us){
int i;
字符温度[strlen(os)];
对于(i=0;i而言,问题来自于填充输入缓冲区的方式。您没有在字符串末尾添加\0
还有一个“问题”,在声明数组时,如果需要动态大小,则需要使用malloc。声明数组的方式将不会有动态大小,数组的大小将在编译时计算。请记住。问题在于填充输入缓冲区的方式。您不会在st结尾添加\0铃声
还有一个“问题”,在声明数组输出时,如果需要动态大小,则需要使用malloc。声明数组的方式将不会有动态大小,数组的大小将在编译时计算。请记住。由于不能使用malloc,因此可以强制为输入字符串的结尾和输出字符串的结尾添加终止\0,
// input
for(i=1; i<100; i++){
scanf("%c", &input[i]);
if(input[i]=='\n'){
input[i] = '\0'; // add terminating \0 for input
break;
}
}
// out
for(i=loc+strlen(ns); i<strlen(us)-(strlen(os)-strlen(ns)); i++){
out[i]=us[loc+strlen(os)+k];
k++;
}
int len = strlen(us)-(strlen(os)-strlen(ns));
out[len] = '\0'; // for out termiante \0
printf("%s\n", out);
//输入
对于(i=1;i由于不能使用malloc,因此可以强制为输入字符串结尾和输出字符串结尾添加终止\0
// input
for(i=1; i<100; i++){
scanf("%c", &input[i]);
if(input[i]=='\n'){
input[i] = '\0'; // add terminating \0 for input
break;
}
}
// out
for(i=loc+strlen(ns); i<strlen(us)-(strlen(os)-strlen(ns)); i++){
out[i]=us[loc+strlen(os)+k];
k++;
}
int len = strlen(us)-(strlen(os)-strlen(ns));
out[len] = '\0'; // for out termiante \0
printf("%s\n", out);
//输入
对于(i=1;i