"integer from pointer without cast" 向指针添加空字节时

"integer from pointer without cast" when adding nullbyte to pointer

我今天在搞乱所有的字符串函数,虽然大多数都按预期工作,特别是因为我停止尝试修改文字(叹气),有一个警告和我似乎无法解决的问题。

#include <stdio.h>
#include <string.h>

int main() {
char array[] = "Longword";
char *string = "Short";

strcpy(array, string); // Short

strcat(array, " "); // Short (with whitespace)

strcat(array, string); // Short Short

strtok(array, " "); // Short

if (strcmp(array, string) == 0)
{
    printf("They are the same!\n");
}

char *substring = "or";

if (strstr(array, substring) != NULL)
{
    printf("There's a needle in there somewhere!\n");
    char *needle = strstr(array, substring);
    int len = strlen(needle);
    needle[len] = "[=11=]"; // <------------------------------------------------
    printf("Found it! There ya go: %s",needle);
}

printf("%s\n", array);

return 0;
}

请随意忽略前几个操作 - 我将它们留在原处是因为它们以某种方式修改了数组,这使得 strstr 函数在开始时很有用。

问题是第二个 if 语句,第 32 行,如果您要在编辑器中复制它。 (编辑:在行中添加了箭头。抱歉!)

您的第二个 strcat 调用超出了 array 的末尾,破坏了内存中它之后的任何内容。一旦发生这种情况,后面的代码可能会做任何事情,这就是为什么写超过数组末尾是未定义的行为

这一行是错误的:

needle[len] = "[=10=]";

双引号构成一个字符串文字,其类型为char *。但是 needle[len] 是一个 char。要制作 char 文字,您可以使用单引号:

needle[len] = '[=11=]';

Single quotes vs. double quotes in C or C++