【发布时间】:2019-03-03 02:50:48
【问题描述】:
我正在编写一个简单的代码来从字符串 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:拉拉
输出:1
【问题讨论】:
-
strcpy不为您分配内存。你应该这样做:char *h=malloc(strlen(haystack)+1); strcpy(h, haystack); -
您的代码看起来也非常复杂。而且您从不使用
s3等。有很多问题。您可能应该从更简单的内容开始,并阅读 C 教科书中处理字符串和指针的章节。 -
A
char*不是像其他语言那样的预制字符串类。它只是一个指向在别处分配的内存的低级地址。见stackoverflow.com/questions/37549594/… -
@KrishanPalSingh 好的,现在好多了,但也请说明您如何调用
code函数。提供minimal reproducible example。 -
char h[] = ""; strcpy(h, s2);-->h[]只是一个 1char数组。stcpy()肯定会溢出目的地。
标签: c arrays pointers char strcpy