我试图按如下方式分割字符串:
1.97E+13,1965.10.30,12:47:01 AM,39.1,23,greece,,,,,10,4.8,4.6,4.6,4.8,4.6,4.7
我使用strtokand Give,作为分隔符,但由于某些逗号之间没有值,因此出现分段错误。
将空值分配给连续逗号的正确方法是什么?
我正在尝试用 C 语言实现一个strlen递归函数,由于某种原因,它返回的值是预期的 4 倍。
int *strlen(char *s)
{
if(*s == '\0')
return 0;
else
return 1 + strlen(s+1);
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我将函数的返回类型更改为“char”时,我得到了所需的结果。我不明白为什么,无论如何它应该返回一个 int 。这段代码是我从书上抄来的,应该是对的。
考虑这段代码:
char *test() {
return "HELLO";
}
int main() {
char *p = test();
printf("%s\n", p);
}
Run Code Online (Sandbox Code Playgroud)
这会在没有警告的情况下进行编译,我猜是因为"HELLO"它没有存储在堆栈中。但这给了我一个警告:
char *test() {
char arr[] = "HELLO";
return arr;
}
int main() {
char *p = test();
printf("%s\n", p);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
字符串文字真的存储在称为字符串文字池的区域中吗?
如果是这样,存储在字符串文字池中的数据是否可以被视为全局数据?
从函数返回字符串文字总是安全的(因为它是全局的)?
所以...当我去的时候:
cout<<stringName<<endl;
Run Code Online (Sandbox Code Playgroud)
我明白了:
NT
Run Code Online (Sandbox Code Playgroud)
但是当我走的时候:
cout<<stringName.c_str()<<endl;
Run Code Online (Sandbox Code Playgroud)
我明白了:
NTNT
Run Code Online (Sandbox Code Playgroud)
为什么?
我只是在学习 C 和 C++ 编程。
我已经搜索过,似乎无法找到一个有不错回应的答案。当然使用<string>要容易得多,但对于这项任务,我只需要使用 clib<string.h>函数;我也不允许使用 C++11 函数。
我有以下两个变量,并且希望移动的内容buffer进入c。
vector<char> buffer;
char* c = "";
Run Code Online (Sandbox Code Playgroud)
我怎样才能轻松做到这一点?
到目前为止我有这个,但它显然不起作用,否则我不会在这里。
for (int b = 0; b < buffer.size(); b++)
{
c += &buffer[b];
}
Run Code Online (Sandbox Code Playgroud) 我有一个主要功能,称之为:
int main (int argc, char * argv[]) {
char * x = (char*) malloc(100);
x = "test string";
printf("data: %s", x);
StreamManager * SM = new StreamManager(NULL, x);
}
Run Code Online (Sandbox Code Playgroud)
StreamManager在这里有一个构造函数:
StreamManager::StreamManager(ConnectionManager * CMin, char * data) {
printf("Creating StreamManager\n");
printf("%s\n", data);
printf("done");
...
}
Run Code Online (Sandbox Code Playgroud)
调用它给出了输出:
data: test stringCreating StreamManager
test string
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
为什么?它不应该被终止吗?
编辑:即使在更改后问题仍然存在.
主要:
char * x = (char*) malloc(100);
strcpy(x, "This is a test");
StreamManager * SM = new StreamManager(NULL, x);
Run Code Online (Sandbox Code Playgroud)
构造器:
printf("Creating StreamManager\n"); …Run Code Online (Sandbox Code Playgroud) 以下代码有什么问题?memset应该与Pointer一起使用,以填充内存块.但此代码在控制台中显示分段错误(核心转储)的问题
#include<iostream>
#include <cstring>
using namespace std;
int main(int argc, char** argv)
{
char* name = "SAMPLE TEXT";
memset(name , '*', 6);
cout << name << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

C代码:
#include<stdio.h>
#include<string.h>
#define STRINGS 10
#define STR_LEN 20
int main(void)
{
char words[STRINGS][STR_LEN];
char input[STR_LEN];
int i;
int mycount;
for(i = 0;i < STRINGS;++i;)
{
printf("Enter a word (or 0 to quit)\n:");
scanf("%19s", input);
if(input[0] == '0') break;
strncpy(words[i], input, STR_LEN);
mycount++;
}
printf("A total of %d strings were entered!\n",mycount);
}
Run Code Online (Sandbox Code Playgroud)
问题:当我运行此代码并输入一些字符串时,它不会打印出我输入的字符串数量
char8_t在 C++20 中修复了 的一些问题char,因此我正在考虑使用char8_t而不是charutf8 文本(例如来自命令行的文本)。但后来我注意到strlen标准中没有指定要与 一起使用char8_t,实际上 cstring 库中没有指定函数。我可以期望在下一个标准更新中发生这种情况吗?或者从来没有打算按照我想要的方式char8_t替换?char
我听说
strlen()C 标准库中的字符串操作(例如)访问和操作字符串的字符,一次一个字符。以上是真的吗?
有哪些解决方案可以提高字符串操作的时间性能?