我想复制C(Windows)中包含空值的字符串.我需要一个函数,我将传递缓冲区长度,以便NULL字符将毫无意义.我找到了StringCbCopy函数但它仍然在第一个NULL字符处停止.
为什么使用is_it_valid_color("yellow")工作和输出FOUND IT但使用is_it_valid_color(x.c_str());不起作用?
我有一种感觉它与null终止字符串有关.控制台中的输出看起来相同:
color: 'yellow'
FOUND IT
color: 'yellow'
Run Code Online (Sandbox Code Playgroud)
.
const char *color_names[] = {"yellow", "green", "red"};
const int color_names_SIZE = 3;
void is_it_valid_color(const char* color) {
cout << "color: '" << color << "'" << endl;
for(int i = 0; i < color_names_SIZE; ++i) {
if(color == *(color_names + i)) {
cout << "FOUND IT" << endl;
break;
}
}
}
is_it_valid_color("yellow");
string x = "yellow";
is_it_valid_color(x.c_str());
Run Code Online (Sandbox Code Playgroud) 一个例子说超过千言万语:
unsigned char *hello = (unsigned char*)malloc(STR_LEN * sizeof(unsigned char));
const char *str= "haha";
memcpy(hello, str, strlen(str) + 1);
Run Code Online (Sandbox Code Playgroud)
如何打印整个hello变量的内容(printf("%s",..)仅在\0-termination 之前尊重部分而不是所有STR_LEN字符).
如果我创建动态char数组:
char * c = new char[5];
Run Code Online (Sandbox Code Playgroud)
我\0不用字符串来填充它,空字符是否在这个数组的末尾?
我有一个字符串,末尾有一些空格.我想在第一个空格出现的位置终止这个字符串,这样当我稍后进行strncpy()它时,它只会复制不包含空格的字符串部分.
这是一些尝试,显然给了我一个细分.我该怎样做我打算做的事情?
int main() {
char* s1 = "SomeString ";
*(s1 + 10)='\0';
printf("%s\n",s1);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我是C的新手,我们需要手动将终止'\ 0'字符添加到字符串时有点困惑.给定此功能来计算字符串长度(为清楚起见):
int stringLength(char string[])
{
int i = 0;
while (string[i] != '\0') {
i++;
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
它根据空终止字符计算字符串的长度.那么,使用以下情况,'\ 0'字符的作用是什么(如果有的话)?
情况1:
char * stack1 = "stack";
printf("WORD %s\n", stack1);
printf("Length %d\n", stringLength(stack1));
Run Code Online (Sandbox Code Playgroud)
打印:
WORD stack
Length 5
Run Code Online (Sandbox Code Playgroud)
案例2:
char stack2[5] = "stack";
printf("WORD %s\n", stack2);
printf("Length %d\n", stringLength(stack2));
Run Code Online (Sandbox Code Playgroud)
打印:
WORD stack???
Length 8
Run Code Online (Sandbox Code Playgroud)
(这些结果每次都有所不同,但永远不正确).
案例3:
char stack3[6] = "stack";
printf("WORD %s\n", stack3);
printf("Length %d\n", stringLength(stack3));
Run Code Online (Sandbox Code Playgroud)
打印:
WORD stack
Length 5
Run Code Online (Sandbox Code Playgroud)
案例4:
char stack4[6] = "stack";
stack4[5] = '\0'; …Run Code Online (Sandbox Code Playgroud) 在这部分代码中:
char* data;
char num[10];
sprintf(num, "%d", 260);
strcat(data, num);
strcat(data, "\0");
sprintf(num, "%d", 130);
strcat(data, num);
sprintf(num, "%d", 128);
strcat(data, num);
printf("Data: %s", data);
Run Code Online (Sandbox Code Playgroud)
它的印刷:
Data: 260130128
Run Code Online (Sandbox Code Playgroud)
为什么会这样?null终止符不应该终止打印?
谢谢
编辑:
数据已经初始化,我从一个函数中获取它.
为什么不打印只有260?我该怎么做?
如何检查char数组是否以空值终止?
char input[80];
fgets(input, sizeof(input), stdin);
for (i = 0; input[i]; i++)
{
if (input[i] == '\0') {
printf("null!!!"); // never works
}
}
Run Code Online (Sandbox Code Playgroud)
例如,以下代码不会打印null.