我正在自学C语言.我有以下代码,通过char向前和向后打印字符串char:
#include<stdio.h>
#include<string.h>
main(){
char *str;
fgets(str, 100, stdin);
//printf("%i", strlen(str));
int i;
for(i = 0; i < strlen(str) - 1; i++){
printf("%c", str[i]);
}
for(i = strlen(str); i > -1; i--){
printf("%c", str[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,它给我以下输出(假设我输入"hello"):
cello
ollec
Run Code Online (Sandbox Code Playgroud)
另外,如果我取消注释第7行代码,我得到以下输出(假设我输入"hello"):
6 ?
Run Code Online (Sandbox Code Playgroud)
对于我的生活,我无法弄清楚我正在做什么导致输出中的第一个字符发生变化.在第二个例子中,我知道字符串长度为6,因为'h'+'e'+'l'+'l'+'o'+'\ 0'= 6.这很好,但是在哪里锹符号来自?为什么只打印其中一个?
对我来说很明显,我对这里发生的事情有一些基本的误解,我无法在其他地方找到任何这方面的例子.任何人都可以解释这里出了什么问题吗?
你永远不会为字符串分配内存.代替
char *str;
Run Code Online (Sandbox Code Playgroud)
使用
char str[100];
Run Code Online (Sandbox Code Playgroud)
这样你就有足够的空间容纳你在那里通过fgets电话阅读的最多100个字符.