使用 get 获取输入的字符串修改

string modification taking input using get

我正在尝试使用其他 .

修改一个字符串的值
#include <stdio.h>
#include <string.h>
int main(void) {
char ch[10],s[3];
int c;
fgets(ch,10,stdin);
fgets(s,2,stdin);
c=(int)s[1];
ch[3]+=c;//s[1];
printf("%c\n",s[1]);
printf("%s",ch);

    return 0;
}

s[1] 的输出为空白,ch 保持不变。但是,如果我删除第二个 gets 并使用常量代替 c,程序工作正常。 我想知道我的错误以及字符串操作的最佳简单方法。

编辑:将 s[2] 更改为 s[3],结果仍然相同

如果第二个 fgets() 读取了一些东西(1 个字符),一个终止空字符将被写入 s[1]

终止空字符的位全部为零,这意味着s[1]的值将变为0

加零几乎没有任何意义。

您运行正在处理一系列问题。第一个是,如果您正在阅读 fgets(s,2,stdin);,您会在 s 中获得最多 1 个字符,外加 nul-terminating 个字符。如果您随后取 c=(int)s[1];,则您正在将 s 的第二个字符读入 c。如果输入了 1 个字符,s 的第二个字符将 始终'\n'0xa 十六进制,10 十进制)或 0nul 终止 字符)。

您 运行 进入下一个 ch[3]+=c; 问题。其结果必须在字符的可打印范围内。 (参见:asciitable.com)。这意味着如果 ch 包含 AAAAs 的第一个字符必须具有 61 或更小的 ASCII 值才能保留在可打印字符范围内。

举个例子:

#include <stdio.h>

int main (void) {

    char ch[10] = "",
          s[3]  = "";
    int c = 0;

    printf (" first input : ");
    fgets (ch, 10, stdin);
    printf (" second input: ");
    fgets (s, 3, stdin);
    printf ("\n you entered:\n first : %s second: %s\n", ch, s);

    c = s[0];
    ch[3] += c;

    printf(" s[1] : %c\n",s[0]);
    printf(" ch   : %s\n",ch);

    return 0;
}

示例使用

$ /bin/fgetsbasic
 first input : HAHA
 second input: !

 you entered:
 first : HAHA
 second: !

 s[1] : !
 ch   : HAHb

任何 ASCII 值大于 61 的内容都会导致您用不可打印的值填充 ch 的第 4 个字符。 (这取决于 ch 中的第 4 个字符最初是什么)