[英]c - printing the longest string and string length?
我是C语言编程的新手,我想写一个代码来查找最长的字符串,它是字符串数组中的字符串长度。 到目前为止,这是我的代码。
#include <stdio.h>
#include <string.h>
#define N 20
char *longestStrInAr(char str[N][40], int size, int *length);
int main()
{
int i, size, length;
char str[N][40], first[40], last[40], *p;
char dummychar;
printf("Enter array size: \n");
scanf("%d", &size);
scanf("%c", &dummychar);
for (i=0; i<size; i++) {
printf("Enter string %d: \n", i+1);
gets(str[i]);
}
p = longestStrInAr(str, size, &length);
printf("longest: %s \nlength: %d\n", p, length);
return 0;
}
char *longestStrInAr(char str[N][40], int size, int *length)
{
int i,j=0;
int len = 0;
*length = 0;
char word[N];
for(i=0;i<size;i++){
while(str[i][j]!='\0'){
len++;
j++;
}
if(*length<len){
*length = len;
strcpy(word,str[i]);
}
}
return word;
}
main {}是一个给定的函数,* longestStrInAr下的代码是一个我想写的代码。 但是,我当前的代码只能给我最长的字符串长度,并且打印出(空)而不是最长的字符串。 我的输出
您将字符串复制到本地变量,然后返回指向它的指针。 但是返回后,该变量不再有效。 那是不确定的行为,“任何事情”都可能发生。 在这种情况下,似乎进行了一些优化或调试助手将其设置为null。
而是只保留指向str
数组中最长字符串的指针,不要复制任何内容并返回该指针。 或者,如果要简化它,则返回最长字符串的i
索引。
我看到的问题:
不要使用gets
。 这是一个安全漏洞。 请改用fgets
。
fgets(str[i], 40, stdin);
您使用的word
大小不正确。 它的大小必须为40
。
char word[40];
您正在从longestStrInArr
返回指向word
的第一个元素的指针。 但是,一旦函数返回,该内存将无效。 因此,您的程序具有未定义的行为。
您可以通过返回str
最长字符串的索引或提供足以容纳最长字符串的输入参数来修复它。
size_t longestStrInAr(char str[N][40], int size, int *length)
{
size_t index = 0
size_t i,j=0;
int len = 0;
*length = 0;
for(i=0;i<size;i++){
while(str[i][j]!='\0'){
len++;
j++;
}
if(*length<len){
*length = len;
index = i;
}
}
return index;
}
然后将其用作:
size_t index = longestStrInAr(str, size, &length);
printf("longest: %s \nlength: %d\n", str[index], length);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.