onemoo
内容太长,我另写一个回答:对于不确定将要存储多少个字符的情形,你只能先定义一个足够长的数组,比如char s[256]; 在接受输入时不要用那种可以一次性存入一串字符的函数(如scanf("%s", s)),因为你不知道会有多少个字符被输入,用户输入的字符串可能会超过数组的大小,这会导致“溢出”,这是很典型的错误和安全隐患。应该一个字符一个字符地接受输入,比如用for循环getchar(),同时要记下已经输入的字符个数,如果超范围了就停止接受输入(并提示用户输入超长...之类的)。 最后别忘了在字符串尾加上'\0'('\0'是字符串结束的标志)输入完毕后,你可以用 strlen 之类的函数算出有多少个字符。或者你也可以自己算:从数组开头开始数,直到遇到'\0'。关于 sizeof:注意!它不是函数,它是个操作符。它会返回操作数占用内存的大小(以byte为单位,类型是size_t)sizeof有两种用法:sizeof 变量名 :得到的是这个变量占用内存的大小sizeof (类型名) :得到的是这个类型占用内存的大小sizeof后接的如果是个数组名,就会返回整个数组占用的内存大小。比如在你的代码中,sizeof s 就返回1,因为你的s只有一个char元素,一个char元素占一字节。如果 char s[256],那么 sizeof s 就返回 256 * char占用字节数 = 256。 所以你不能用 sizeof s 来求得 s 中有多少个字符,s中也许只存了5个字符,但 sizeof 得到的是整个 s 数组的大小。你只能用 strlen 之类的方法来得到实际字符数。P.S. 准确地说,sizeof的第一个用法中,sizeof后接的不仅是变量名,而是后接一个表达式(变量名也算表达式的一种)。