int main() {
char str1[21];
char str2[21];
char l_str1[21];
char l_str2[21];
printf("Please enter the first word: ");
scanf("%s", str1);
printf("Please enter the second word: ");
scanf("%s", str2);
Lowercase_Strings(str1, l_str1);
Lowercase_Strings(str2, l_str2);
printf("Lowercase string 1: %s", l_str1);
printf("Lowercase string 2: %s", l_str2);
// Converts original strings to lower case, keeping original string unchanged
void Lowercase_Strings(char str[21], char l_str[21]) {
char c;
int i;
for(i = 0; i < strlen(str); ++i) {
c = str[i];
l_str[i] = tolower(c);
}
}
嘿伙计们!在这里新的,如果我对我的格式化有任何不妥之处,我不会介意批评。
这是我程序中的一个片段,用于检查两个字符串是否是彼此的字谜,不区分大小写。
然而,l_str1
数组总是以#34;已损坏&#34;以某种方式与l_str2
数组进行比较,无论调用Lowercase_Strings
的顺序还是分配给任一数组的字符串。
例如,str1 = "MARY"
和str2 = "ARMY"
会产生l_str2 = "army"
,但l_str1 = "mary"
会产生2个随机符号。
如果有人知道发生了什么事情,我们将不胜感激。
答案 0 :(得分:4)
您没有将NULL CHAR附加到转换后的字符串。
在for循环结束时添加以下行
l_str[i] = 0x00;
编辑:
1.数组的两个都没有初始化为任何值。
2. printf
将打印到它在数组中找到null。
所以我只能在这里说你很幸运能够在你的阵列中的正确位置获得null,而在第二阵列中获得2个位置。 您在代码中所做的是未定义的行为,这可能会导致程序崩溃。
答案 1 :(得分:1)
char l_str1[21]="";
char l_str2[21]="";
确保您的字符串\0
已终止。
我会说
scanf("%s", str1);
不是一个好主意,而是使用fgets()。
size_t n;
fgets(str1,sizeof(str1),stdin);
n = strlen(str1)
if(n>0 && a[n-1] == '\n')
a[n-1] = '\0';
答案 2 :(得分:1)
strlen()
不计算终止空值。因此,在Lowercase_Strings()
函数中,在[{1}}循环的[外部]之后,您需要添加
for
确保l_str[i] = `\0`;
以空值终止。
此外,您可能希望使用
来限制输入大小l_str