如何解决在 C 中将字符串添加到 Char 数组中
出于某种原因,当我打印上面的数组时,我得到了一个奇怪的输出。当我通过 WinSCP 终端运行此代码时,它也几乎像死循环一样崩溃。但是,我主要是想修复打印输出。输入:Tom (enter) Jerry (enter) (enter to break) 输出:.N=?tom 杰瑞
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int i,counter = 0;
char nameArr[100] ;
while (1)
{
printf("Enter a name: ") ;
char word[25] ;
// Grab input
fgets (word,sizeof(word),stdin) ;
// Break if no input
if (strcmp (word,"\n") == 0)
break ;
// Checks if there is a number in the input
for (i = 0 ; i < strlen(word) - 1 ; i++)
{
int isItADigit = isdigit(word[i]) ;
if (isItADigit != 0)
{
printf("No no,number detected,no bueno!") ;
return 0 ;
}
}
// Adds word to array
strcat(nameArr,word) ;
// Future Usage
counter ++ ;
}
if (counter < 2 )
{
printf("Name is too short\n") ;
return 0 ;
}
else if (counter > 4)
{
printf("Name is too long\n") ;
return 0 ;
}
//printArray(nameArr) ;
printf("%s",nameArr) ;
return 0;
}
解决方法
数组 char nameArr[100]
未初始化,因此它包含垃圾。例如,这个垃圾可能是:nameArr[0] = '.'
nameArr[1] = 'N'
nameArr[2] = ':'
...
因此,您应该编写:char nameArr[100] = {0};
以将其初始化为 0,或者将其设为静态 static char nameArr[100];
,这也会将其初始化为 0。
strcat
函数要求目标数组已经是一个正确的以空字符结尾的字符串。
由于您尚未初始化数组 nameArr
,其内容不确定,第一次调用 strcat
将导致 undefined behavior。
使用前需要初始化数组:
char nameArr[100] = { 0 }; // Initialize to all zeros,which is the string terminator
您还应该添加一个检查以确保您不会超出数组 nameArr
的范围。
在一个不相关的注释中,请记住 fgets
将换行符留在缓冲区中,除非您希望 nameArr
包含换行符,否则您需要将其删除。
这可以使用 strcspn
函数完成:
fgets (word,sizeof(word),stdin) ;
word[strcspn(word,"\n")] = '\0';
最后你真的应该检查 fgets
是否成功。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。