Онлайн компилятор C

#include <stdio.h> int starts_with(char s[], char prefix[]){ int i=0; while(s[i]!='\0'&&s[i]!='\n'&&s[i]!='.'){ if(s[i]!=prefix[i]){ return 0; } i++; } return 1; } int main() { char dst[1000]="program.",n[1000]="pro."; int answer=starts_with(dst,n); printf("%d",answer); return 0; }
这段代码定义了一个函数 `starts_with`,用来判断字符串 `s` 是否以字符串 `prefix` 开头。在 `main` 函数中,它测试了 `"program."` 是否以 `"pro."` 开头,并打印结果。

- 你的 `while` 循环条件中包含了 `s[i]!='.'`,这会导致当 `s` 中出现点号时提前停止比较。但你的测试字符串 `"program."` 本身就包含点号,所以循环会在遇到点号时结束,而不会比较点号之后的字符。这可能会影响判断结果,尤其是当 `prefix` 也包含点号时。

- 另外,你的循环条件没有检查 `prefix` 是否结束。如果 `prefix` 比 `s` 短,循环可能会继续比较 `prefix` 中不存在的字符,导致越界访问。你应该考虑在循环中同时检查 `prefix[i]` 是否为结束符。