难以将数据正确传递给函数调用

时间:2019-02-04 09:20:30

标签: c syntax-error

我正在用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;

1 个答案:

答案 0 :(得分:0)

这不是定义字符串的正确方法。

C中的字符串是一个以null终止的字符序列(数组)。字符串的长度是字符数。数组的大小是字符数加1表示终止null:

void kstrput(char *str, size_t pos, char ch)
{
    if(pos>strlen(str))
        abort();

    str[pos] = ch;
}

相应地适应kstrlenkstrget。您程序的其余部分保持不变。

程序失败的原因是您将struct的副本传递给了函数(包括完整的字符串!),但从未返回。上面的解决方案将引用(称为指针)传递给该函数,以便对调用者可见修改。