修改字符串(字符数组)

Modifying a String (char array)

我正在尝试用C语言修改一个字符串

    char signal_cat[8]; 

        if (k == 1) {
            strcpy_s(signal_cat, "HPHA",6);             //why cant I change char array (string) values???
        }
        else if (k == 2) {
            strcpy_s(signal_cat, "Normal",6);
        }

        printf("Original signal category: %s \n", signal_cat);

当我 运行 这显示异常 "Unhandled exception at 0x7BEBF71D (ucrtbased.dll) in Lab3Parti.exe: 0xC0000005: Access violation reading location 0x00000006"

我试过了

signal_cat = "HPHA";

也是,但是报错显示"expression must be a modifiable lvalue"

有人知道我该怎么做吗?

您指定的参数顺序无效。 strcpy_s 的调用应该类似于

strcpy_s(signal_cat, sizeof( signal_cat ), "HPHA" );

否则使用标准C函数strcpy like

strcpy( signal_cat, "HPHA" );

假设数组 signal_cat 有足够的 space 来容纳字符串文字。

或者你可以使用另一个标准函数strncpy

strncpy( signal_cat, "HPHA", sizeof( signal_cat ) );
signal_cat[sizeof( signal_cat )-1] = '[=12=]';

至于这个说法

signal_cat = "HPHA";

那么数组没有赋值运算符。它们是不可修改的左值。

什么是strcpy_s?您的代码中是否有它的原型(即您是否包含了正确的声明文件?)它的参数是什么,您为什么要使用它?

你明明是在学C;从某些供应商专有的(通常是奇怪的)扩展开始不是最符合您的利益吗?学习语言,学习其既定的(标准)接口,然后,如果绝对必要,忍受一些供应商扭曲的扩展是一个很好的过程:

#include <string.h>
#include <stdio.h>
int main(void) {
  char signal_cat[8]; 
  strncpy(signal_cat, "HPHA", sizeof signal_cat);
  printf("%s\n", signal_cat);
  strncpy(signal_cat, "Normal", sizeof signal_cat);
  printf("%s\n", signal_cat);
  return 0;
}

您是否使用 Visual Studio 编译您的 C 代码?

如果您是并且编译器强制您使用 strcpy_s() 而不是 strcpy(),您仍然可以通过在顶部定义以下宏来使用标准库函数 strcpy()您的源文件:

#define _CRT_SECURE_NO_WARNINGS

您代码中的实际问题是您以错误的顺序向 strcpy_s() 提供参数。检查函数的原型以正确的顺序提供参数。