C 为什么下面的代码会给出垃圾值?
为什么下面的代码给出垃圾值? 在这里,我试图从用户一个字符一个字符地获取一个字符串作为输入。在下面的代码中,我从用户那里获得了输入并存储在string[]数组中,然后为了执行一些其他操作,我将相同的内容存储在另一个名为temp_string[i]的数组中。但令人惊讶的是,我在输出中得到了垃圾值。而且使用strlen计算的长度也不正确。有人能看看这段代码并解释出哪里出了问题吗C 为什么下面的代码会给出垃圾值?,c,string,C,String,为什么下面的代码给出垃圾值? 在这里,我试图从用户一个字符一个字符地获取一个字符串作为输入。在下面的代码中,我从用户那里获得了输入并存储在string[]数组中,然后为了执行一些其他操作,我将相同的内容存储在另一个名为temp_string[i]的数组中。但令人惊讶的是,我在输出中得到了垃圾值。而且使用strlen计算的长度也不正确。有人能看看这段代码并解释出哪里出了问题吗 #include<stdio.h> #include<stdio.h> int main()
#include<stdio.h>
#include<stdio.h>
int main()
{
char ch;
int i = 0, j = 0;
int length = 0;
int lengthsb = 0;
char string[100];
printf(" Enter the string to divide\n ");
while(ch != '\n')
{
ch = getchar();
string[i] = ch;
i++;
}
char temp_string[i];
printf("%s", string);
i = 0;
while(string[i] != '\n')
{
temp_string[i] = string[i];
i++;
}
length = strlen(temp_string);
printf("Entered string is %s and its length is %d\n", temp_string, length);
}
#包括
#包括
int main()
{
char ch;
int i=0,j=0;
整数长度=0;
int lengthsb=0;
字符串[100];
printf(“输入要分割的字符串\n”);
而(ch!='\n')
{
ch=getchar();
字符串[i]=ch;
i++;
}
字符临时字符串[i];
printf(“%s”,字符串);
i=0;
while(字符串[i]!='\n')
{
临时字符串[i]=字符串[i];
i++;
}
长度=strlen(临时字符串);
printf(“输入的字符串为%s,长度为%d\n”,临时字符串,长度);
}
您需要在字符串末尾添加一个以NULL结尾的字符。添加\0
您需要在字符串末尾添加一个以NULL结尾的字符。添加\0
您忘记在字符串末尾添加空值。
C字符串以null结尾,这意味着C字符串中的所有操作都希望以null标记字符串的结尾,包括strlen之类的函数
您只需添加以下内容即可实现:
string[i] = '\0';
在填充字符串之后
另外,如果用户输入的字符串大于100,会发生什么情况?验证这些情况下的输入很好,否则会导致缓冲区溢出。您忘记在字符串末尾添加null。 C字符串以null结尾,这意味着C字符串中的所有操作都希望以null标记字符串的结尾,包括strlen之类的函数 您只需添加以下内容即可实现:
string[i] = '\0';
在填充字符串之后
另外,如果用户输入的字符串大于100,会发生什么情况?验证这些情况下的输入很好,否则会导致缓冲区溢出。您需要在字符串末尾添加一个
'\0'
字符,以便strlen()
,printf()
和其他处理字符串的C函数都可以工作。这就是C API知道它已到达字符串末尾的方式
此外,您不希望在字符串数组之前的内存空间中设置新字符。因此,您最好在循环中检查它(并保存最后一个数组项以设置'\0'
)
while(ch!='\n'&&i<99)
{
ch=getchar();
字符串[i]=ch;
i++;
}
字符串[i]='\0';//将字符串终止符设置为超过输入的结尾
请记住在将字符复制到temp\u string
后执行相同操作。(顺便说一句,您可以用对的调用替换该循环,该调用正是这样做的,除了它只有在找到'\0'
时才会结束)
您可能还想阅读您需要在字符串末尾添加
'\0'
字符,这样strlen()
,printf()
和其他处理字符串的C函数都可以工作。这就是C API知道它已到达字符串末尾的方式
此外,您不希望在字符串数组之前的内存空间中设置新字符。因此,您最好在循环中检查它(并保存最后一个数组项以设置'\0'
)
while(ch!='\n'&&i<99)
{
ch=getchar();
字符串[i]=ch;
i++;
}
字符串[i]='\0';//将字符串终止符设置为超过输入的结尾
请记住在将字符复制到temp\u string
后执行相同操作。(顺便说一句,您可以用对的调用替换该循环,该调用正是这样做的,除了它只有在找到'\0'
时才会结束)
您可能还想阅读以下是您的最终代码:
#include<stdio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char ch;
int i = 0, j = 0;
int length = 0;
int lengthsb = 0;
char string[100];
char temp_string[100];
printf(" Enter the string to divide\n ");
while(ch != '\n')
{
ch = getchar();
string[i] = ch;
i++;
}
string[i]=NULL;
printf("%s", string);
i = 0;
while(string[i] != '\0')
{
temp_string[i] = string[i];
i++;
}
temp_string[i]=NULL;
length = strlen(temp_string);
printf("Entered string is %s and its length is %d\n", temp_string, length);
}
#包括
#包括
#包括
int main()
{
char ch;
int i=0,j=0;
整数长度=0;
int lengthsb=0;
字符串[100];
字符临时字符串[100];
printf(“输入要分割的字符串\n”);
而(ch!='\n')
{
ch=getchar();
字符串[i]=ch;
i++;
}
字符串[i]=NULL;
printf(“%s”,字符串);
i=0;
while(字符串[i]!='\0')
{
临时字符串[i]=字符串[i];
i++;
}
临时字符串[i]=NULL;
长度=strlen(临时字符串);
printf(“输入的字符串为%s,长度为%d\n”,临时字符串,长度);
}
在上面的代码中,您缺少的是NULL或字符串的“\0”结尾。我添加它只是为了让它有用。这是您的最终代码:
#include<stdio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char ch;
int i = 0, j = 0;
int length = 0;
int lengthsb = 0;
char string[100];
char temp_string[100];
printf(" Enter the string to divide\n ");
while(ch != '\n')
{
ch = getchar();
string[i] = ch;
i++;
}
string[i]=NULL;
printf("%s", string);
i = 0;
while(string[i] != '\0')
{
temp_string[i] = string[i];
i++;
}
temp_string[i]=NULL;
length = strlen(temp_string);
printf("Entered string is %s and its length is %d\n", temp_string, length);
}
#包括
#包括
#包括
int main()
{
char ch;
int i=0,j=0;
整数长度=0;
int lengthsb=0;
字符串[100];
字符临时字符串[100];
printf(“输入要分割的字符串\n”);
而(ch!='\n')
{
ch=getchar();
字符串[i]=ch;
i++;
}
字符串[i]=NULL;
printf(“%s”,字符串);
i=0;
while(字符串[i]!='\0')
{
临时字符串[i]=字符串[i];
i++;
}
临时字符串[i]=NULL;
长度=strlen(临时字符串);
printf(“输入的字符串为%s,长度为%d\n”,临时字符串,长度);
}
在上面的代码中,您缺少的是NULL或字符串的“\0”结尾。我添加它只是为了让它有用。
string
不是以NUL结尾的('\0'
)。temp\u string
也不是以NUL结尾的('\0'
)。也不是temp\u string
谢谢我的问题得到了答案:)谢谢我的问题得到了答案:)请接受帮助你的问题(单击检查)。谢谢我的问题得到了答案:)请接受问题(单击检查)这对你很有帮助。谢谢你我得到了我查询的答案:)谢谢你我得到了我查询的答案:)谢谢你我得到了我查询的答案:)NULL
是一个指针-你不应该将它分配给char
-对stri使用'\0'