【发布时间】:2022-01-22 17:54:30
【问题描述】:
我编写了一个代码,但由于某些原因,当我编译它时,我可以输入字符串,但编译器会中断。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
main(){
char s1[100]={};
char s2[100]={};
gets(s1);
gets(s2);
int zbr;
funkcija(s1[100], s2[100], &zbr);
printf("Zbroj duljina stringova je: %d", zbr);
}
void funkcija(char x1[100],char x2[100], int *pzbr){
int n1=0, n2=0;
n1=strlen(x1);
n2=strlen(x2);
*pzbr=n1+n2;
}
在输入字符串后,它表示程序已停止工作,Windows 正在尝试修复它,就像您在 scanf 中输入地址时一样。
【问题讨论】:
-
当你调用
funkcija函数并传递s1[100]时,s1[100]这个表达式真的在做什么?尝试向您的rubber duck 解释。还有一些其他问题表明您需要退后一步,投资几本书并从头开始阅读。 -
欢迎来到 SO。您应该打开编译器警告。在您的函数调用中,
s1[100]是该数组的单个元素。它也是最后一个元素的后面。两者(越界访问数组并将错误的参数类型传递给您的函数)都会导致未定义的行为 -
无关:从不使用
gets。它甚至从 C11 的语言中删除。 -
另外,永远不会使用
gets!它是如此的dangerous,它自1990年代以来就已经过时了,并在十年前在 C11 标准中完全删除。 -
感谢您的建议和帮助。
标签: c string function pointers