gpt4 book ai didi

c - 通过 strcpy 初始化时,字符数组的行为如何?

转载 作者:行者123 更新时间:2023-11-30 21:05:49 25 4
gpt4 key购买 nike

我正在编写一个简单的代码,从字符串 s2 中查找字符串 s1,然后将其保存在字符串 s3 中。如果字符串 s1 存在于 s2 中,则该函数返回 1,否则返回 0。我使用指针作为参数。问题是,即使我将 s1 分配给 n,代码第 30 行也没有为我提供正确的输出。此外,代码表现异常。能指出错误吗?

#include<string.h>
#include<stdio.h>
int code(char * s2, char * s1, char * s3)
{
char h[] = "";
strcpy(h, s2);
printf("%s\n", h);

char n[] = "";
strcpy(n, s1);
printf("%s\n", n);

char b[] = "";

int i = 0, j = 0, flag = 0, flag2 = 0;

for (i = 0; n[i] != '\0'; i++)
{
printf("%d\n", i);
printf("%c\n", n[i]);
for (j = 0; h[j] != '\0'; j++)
{
printf("%c\n", h[j]);
if (n[i] == h[j])
{
flag = 1;
break;
}

}
if (flag == 1)
{
break;
}
}

printf("%d\n", i);
printf("%d\n", j);

printf("%c\n", n[i]);
printf("%c\n", h[j]);

printf("\n");

if (flag == 1)
{
printf("Here:1\n");
printf("%c\n", h[j]);
while (n[i] != '\0')
{
printf("Here: %d\n", i);
printf("%c\n", n[i]);
printf("%c\n", h[j]);
if (n[i] == h[j])
{
printf("Here:2 %d %d\n", i, j);
printf("%c\n", n[i]);
printf("%c\n", h[j]);
b[i + 1] = n[i];
i = i + 1;
j = j + 1;

}
else
{
printf("Here:3\n");
flag2 = 1;
break;
}
}

if (flag2 == 1)
{
printf("Here:4\n");
return 0;
}
else
{
printf("Here:5\n");
b[i + 1] = '\0';
s3 = b;
return 1;
}

}
else
{
printf("Here:6\n");
return 0;
}

}

输入:s2:普通 s1:lla

输出:1

最佳答案

字符数组 hnb 的大小为 1。

在代码中进行以下修改:

  char h[100] = "";  // << change here
strcpy(h, s2);
printf("%s\n", h);

char n[100] = ""; // << change here
strcpy(n, s1);
printf("%s\n", n);

char b[100] = ""; // << change here

通过这些修改,数组最多可以包含 100 个字符。现在您的代码似乎或多或少可以工作。

免责声明:

  • 即使进行了这些修改,您的代码仍然很糟糕且效率低下
  • 这些修改只是快速而肮脏的黑客行为,如果涉及的字符串超过 99,该函数将无法工作
  • 您的代码中可能存在其他问题
  • s3 = b; 由于多种原因,这不起作用,但那是另一个主题了

关于c - 通过 strcpy 初始化时,字符数组的行为如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52532753/

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