【发布时间】:2023-03-21 16:08:01
【问题描述】:
我的代码: 我要做的是输入两个字符串,然后返回最长的一个。如果它们的长度相同,则返回 NULL。现在,代码只是在输出乱码,我不知道为什么。该函数返回一个指向最大字符串的第一个字符的指针。然后它通过while循环,我试图取消引用指针并打印出它的值。
注意:我正在为考试复习,我们必须只使用指针,而不是将字符串视为数组。
#include<stdio.h>
char* string_ln(char*, char*);
int main() {
char str1[20];
char str2[20];
char* length;
scanf("%s%s", str1, str2);
length = string_ln(str1, str2);
while (length != '\0') {
printf("%c", *length);
length++;
}
}
char* string_ln(char*p1, char*p2) {
int count1 = 0;
while (*p1 != '\0') {
count1++;
p1++;
}
int count2 = 0;
while (*p2 != '\0') {
count2++;
p2++;
}
if (count1 > count2) {
return p1;
}
else if (count2 > count1) {
return p2;
}
else {
return NULL;
}
}
【问题讨论】:
-
您在 string_ln 函数中同时增加 p1 和 p2 ,然后稍后返回其中一个,因此它现在指向字符串的末尾,而不是开头。另外,你不能使用strlen有什么原因吗?此外,
length是指向字符串的指针的错误名称。 -
@jarmod 我的考试要求根本不使用预建函数
-
你可以通过“并行”检查字符串的结尾来提高效率......想象一个字符串是 3 个字符长,另一个是 1M 长。当大约 7 或 8 个字符就足够时,您发布的函数会检查大约 1,000,003 个字符。
标签: c pointers c-strings string-comparison function-definition