【发布时间】:2012-11-05 04:18:51
【问题描述】:
为什么这段代码有效?如果第一个元素只包含第一个字符,那么其余字符存储在哪里?如果这是可能的,我们为什么不使用这种方法?
注意第 11 行:静态字符 c[1]。使用一个元素,您可以存储任意数量的字符。当稍后指向它时,我使用静态来使内存位置在函数之外保持活动状态。
#include <stdio.h>
void PutString( const char* pChar ){
for( ; *pChar != 0; pChar++ )
{
putchar( *pChar );
}
}
char* GetString(){
static char c[1];
int i = 0;
do
{
c[i] = getchar();
}while( c[i++] != '\n' );
c[i] = '\0';
return c;
}
void main(){
PutString( "Enter some text: " );
char* pChar = GetString();
PutString( "You typed the following:\n" );
PutString( pChar );
}
【问题讨论】:
-
这是未定义的行为。一切都会发生,但所有的赌注都没有了。 (
void main也很奇怪) -
还有大约 10,000 人。
-
换句话说,内存可以被程序访问,因为它认为它没有被使用?
-
@EdS.,嗯,好的。我不知道输入搜索的正确关键字。我担心我可能会问一些已经问过的问题。
-
@adabo:
main应该返回int。