gpt4 book ai didi

C:正确地将数组传递给另一个方法

转载 作者:行者123 更新时间:2023-12-02 08:59:57 24 4
gpt4 key购买 nike

/*
* PURPOSE
* Search if a string contains a string and print it out from there
*/
#include <stdio.h>

void searchHaystack(char cHaystack[], char cNeedle[]);
void showResult(int iOffset, char cHaystack[]);

int main() {
// Declarations
char cHaystack[50], cNeedle[50];

// Input
puts("Haystack:");
gets(cHaystack);
puts("Needle:");
gets(cNeedle);

// Call searcher
searchHaystack(cHaystack, cNeedle);

return 0;
}

void searchHaystack(char cHaystack[], char cNeedle[]) {
// Declarations
int iCntr, iCntr2, iFoundOffset;

// Search the haystack for the first letter of the needle
for (iCntr == 0; iCntr < 50 && cHaystack[iCntr] != '\0'; iCntr++) {
if (cHaystack[iCntr] == cNeedle[0]) {
iFoundOffset = iCntr;
for (iCntr2 == 1; iCntr2 < 50 && (cHaystack[iCntr+iCntr2] == cNeedle[iCntr2] || cNeedle[iCntr2] == '\0'); iCntr2++) {
if (cNeedle[iCntr2] == '\0') {
showResult(iFoundOffset, cHaystack);
}
}
}
}
}

void showResult(int iOffset, char cHaystack[]) {
int iCntr;

// Print the substring char by char
for (iCntr == iOffset; iCntr < 50 && cHaystack[iCntr] != '\0'; iCntr++) {
printf("%c", cHaystack[iCntr]);
}
printf("\n");
}

查看我的调试器,我注意到 cHaystack[] 和 cNeedle[] 未正确传递给 searchHaystack,因为仅保留第一个字符。我该如何解决?我还没学过指针。

此外,我在所有三个 for 循环上都收到此警告:

statement with no effect

这是怎么回事?

最佳答案

实际上,整个数组都被传递,调试器默认只显示第一个字符,因为在 C 中,系统不知道数组的大小。这是程序必须跟踪的内容。由于您使用的是通常以 null 结尾的字符串,因此请尝试设置监视变量“(char*)cHaystack”(不带引号)并查看调试器显示的内容。

此外,赋值语句应该有一个 = 符号,而不是两个 == 符号。所以:

for (iCntr = 0; ...

应该使用,而不是:

for (iCntr == 0; ...

与其他 for 循环相同。

关于C:正确地将数组传递给另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com