#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i = 0;
char c;
char *array;
char *data;
char *ret;
array = (char *) malloc(100);
data = (char *) malloc(strlen(argv[1])+1);
strcpy(data, argv[1]); // store the word john into the array called data
while((c=getchar())!=EOF) // stores the words in the txt file into array
{
array[i]=c;
i++;
}
ret = strstr(array, data); // find a substring (john in this case)
printf("The substring is: %s\n", ret);
*ret = "jack"; // Doesn't work here, but I want to replace john with jack
free(data);
free(array);
return 0;
}
我已经对strstr工具做了一些研究,看起来它找到了第一次出现的子串并返回指向该位置的指针。使用该指针我想修改它,但对我来说不是那么好。
当我运行它时,我在Ubuntu的终端看起来像这样:
./ a.out john&lt; beatles.txt
我的披头士乐队文字看起来像这样;
保
约翰
林檎
约翰
最后,我希望我的包含这4个名字的数组让john替换为jack例如。无论如何我可以使用strstr工具给我的指针来做到这一点吗?
我想我需要一段时间llop或者循环tog et数组中的每个john都要用jack *重新生成
答案 0 :(得分:0)
您不想修改指针,您想要修改指针指向的内容。 ret
也指向一个字符,因此*ret
是一系列字符的第一个字符,在本例中是字符
'j'
,因此您无法为其分配字符串。您必须替换该序列的每个字符。函数memcpy
可以帮助您。
替换其他出现的&#34; john&#34;你可以使用这个循环:
while(ret = strstr(array, data)){
printf("The substring is: %s\n", ret);
memcpy(ret, "jack", strlen("jack"));
}
strstr()
如果找不到任何内容则会返回NULL
,当发生这种情况时,您将会退出循环。
您的代码也存在一些问题:
argv[1]
代替data
。fread()
将文件复制到缓冲区。