使用 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
十进制)或 0
(nul 终止 字符)。
您 运行 进入下一个 ch[3]+=c;
问题。其结果必须在字符的可打印范围内。 (参见:asciitable.com)。这意味着如果 ch
包含 AAAA
,s
的第一个字符必须具有 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 个字符最初是什么)
我正在尝试使用其他 .
修改一个字符串的值#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
十进制)或 0
(nul 终止 字符)。
您 运行 进入下一个 ch[3]+=c;
问题。其结果必须在字符的可打印范围内。 (参见:asciitable.com)。这意味着如果 ch
包含 AAAA
,s
的第一个字符必须具有 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 个字符最初是什么)