我打算修改特定字符串的每个其他字母.但就本计划而言,这一切都不会发生.到目前为止,我已经从用户那里抓取了一个字符串并将其存储userinput并打算打印出来.
#include <stdio.h>
#include <string.h>
int main(void) {
char userinput[256] ="";
printf("Enter somthing to change:\n");
scanf("%s", &userinput);
printf("%s\n", userinput);
int k = 2; // This is just here to do something every time k is even
int j = strlen(userinput);
for (int i = 0; i < j; i++) {
if(k % 2 == 0) {
printf("%s", userinput[i]);
k++;
}
else {
printf("%s", userinput[i]);
k++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
strlen()但是该功能不起作用userinput.我strlen()认为这是因为应该获取字符串的第一个字符的地址然后迭代直到达到空字符,但scanf实际上不创建空字符.'\0'在没有先知道字符串的长度的情况下,我无法想出一种在字符串后添加字符串的方法.
如果存储在数组中,我将如何访问存储的字符序列的长度?
这个:
scanf("%s", &userinput);
Run Code Online (Sandbox Code Playgroud)
应该:
scanf("%s", userinput);
Run Code Online (Sandbox Code Playgroud)
运营商的地址&是不需要的,也是不正确的.传递给函数时,数组会衰减到第一个元素的地址.scanf("%s")将附加一个空终止字符,因此不必显式插入一个.
为防止潜在的缓冲区溢出,请指定scanf()应写入的最大字符数userinput.这应该小于一个大小userinput,为终止空字符留出空间:
scanf("%255s", userinput);
Run Code Online (Sandbox Code Playgroud)
不正确的格式说明符(未定义的行为)用于打印以下char内容userinput:使用%cnot %s.这个:
printf("%s", userinput[i]);
Run Code Online (Sandbox Code Playgroud)
一定是:
printf("%c", userinput[i]);
Run Code Online (Sandbox Code Playgroud)