在验证strcat是发生错误的位置之后,然后检查我的作业中的上一个示例。在我之前的例子中,我使用strcat(实际上是strncat)的方式和我下面的代码一样。我不太确定。
我的程序的目的是遍历“string”并从字符串中删除字符“c”的任何出现。
main.c中:
char string[100]={0}, c[3];
printf("Enter a String: ");
fgets(string, 100, stdin);
if (string[98] == '\n' && string[99] == '\0') { while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); }
printf("Enter a Char: ");
fgets(c, 2, stdin);
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
rmchr(string, c[0]);
头:
rmchr(char *string, char c)
{
int i=0;
char *word[100];
int s = strlen(string);
for(i=0; i<=(s-2); i++)
{
if(string[i] != c)
{
strcat(word, string[i]);
}
}
}
答案 0 :(得分:2)
char *word[100];
它会在你的程序中保存一个字符串,所以请使用:
char word[100];
即char
的数组,而不是char *
的数组。
然后strcat
连接到一个字符串,但word
未初始化。使用以下字符串创建一个字符串:
word[0] = '\0';
然后string[i]
是一个字符,但是strcat
需要指向字符参数的指针:使用指针使用&string[i]
。
最后你的rmchr
函数中的问题是它必须通过参数或通过return语句返回一些东西,但它不会。
答案 1 :(得分:0)
这里提到的不止一点,比如
rmchr()
定义应该有一个返回类型,如果您没有返回任何内容,可能会void
。
[ FWIW,在这种情况下,我是谁,你将如何利用局部变量word
]
在rmchr()
内,word
需要是char
s的数组,而不是char
指针。您需要将char * word[100]
更改为char word[100]
。
strcat()
中,两个参数都需要是一个指针。在这种情况下,您需要使用&string[i]
。 答案 2 :(得分:0)
以下似乎编译正常,但你的代码并没有完全按照你所说的去做,“我的程序的目的是遍历”string“并从字符串中删除任何字符'c'。”该函数不会删除该字符或返回包含该字符的字符串副本。我写了一个函数,在删除字符后复制字符串并返回指向它的指针。下面是你的代码有点修改,在它下面是我的功能
alert($("#code1").data("code").split(";")[0]);
alert($("#code2").data("code").split(";")[0]);
alert('test');
你去,有一个演示主
//Just a compilable version of your code, not sure if it does what u want
#include <stdio.h>
#include <string.h>
void rmchr(char *string, char c)
{
int i=0;
char word[100];
int s = (int)strlen(string);
for(i=0; i<=(s-2); i++)
{
if(string[i] != c)
{
strcat(word, (char *)(&string[i]));
}
}
}
int main(int argc, const char * argv[]) {
char string[100] = {0}, c[3];
char ch;
printf("Enter a String: ");
fgets(string, 100, stdin);
if (string[98] == '\n' && string[99] == '\0') {
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
}
printf("Enter a Char: ");
fgets(c, 2, stdin);
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
rmchr(string, c[0]);
return 0;
}