修改字符串(字符数组)
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() 提供参数。检查函数的原型以正确的顺序提供参数。
我正在尝试用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() 提供参数。检查函数的原型以正确的顺序提供参数。