我正在用C编写程序,我需要将一个字符作为输入。然后,我应该用新输入的字符替换用户已经输入的字符串pos
中先前指定的位置kstring
。
我有正确执行此任务的函数,但似乎无法正确传递来自main
的数据或正确调用该函数。也许我什至无法正确存储数据,因为它无法正常工作。
我不断收到语法错误。代码在下面,底部只有main
的一部分:
typedef struct
{
char *data;
size_t length;
} kstring;
void kstrput(kstring str, size_t pos, char ch){
int len = str.length;
if(pos>=len)
abort();
str.data[pos] = ch;
}
char kstring[50];
int kstring_length;
printf("\n Enter a string ");
fgets(kstring, sizeof(kstring), stdin);
kstring_length= kstrlen(kstring);
printf("The length of given string is %d ", kstring_length - 1);
int pos;
char str_pos;
printf(" \n Enter the position where you want find the character:- ");
scanf("%d",&pos);
str_pos = kstrget(kstring, pos);
printf("The character at index %d is %c",pos,str_pos, "\n");
char s;
printf("\n Enter a character ");
scanf("%d",s);
kstrput(kstring,pos,s); // calling the kstrput function
//printing the struct to check value of the string:
printf("\n After kstrput: %s %u ",kstring.data);
return 0;
答案 0 :(得分:0)
这不是定义字符串的正确方法。
C中的字符串是一个以null终止的字符序列(数组)。字符串的长度是字符数。数组的大小是字符数加1表示终止null:
void kstrput(char *str, size_t pos, char ch)
{
if(pos>strlen(str))
abort();
str[pos] = ch;
}
相应地适应kstrlen
和kstrget
。您程序的其余部分保持不变。
程序失败的原因是您将struct
的副本传递给了函数(包括完整的字符串!),但从未返回。上面的解决方案将引用(称为指针)传递给该函数,以便对调用者可见修改。