标签: c-strings

C - 有时分隔符之间没有值时如何用分隔符分割字符串?

我试图按如下方式分割字符串: 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 split c-strings strtok segmentation-fault

0
推荐指数
1
解决办法
145
查看次数

为什么我的递归 strlen 函数返回值大 4 倍?

我正在尝试用 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 。这段代码是我从书上抄来的,应该是对的。

c recursion c-strings

0
推荐指数
1
解决办法
64
查看次数

从函数返回字符串文字真的安全吗?

考虑这段代码:

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)

我的问题是:

  1. 字符串文字真的存储在称为字符串文字池的区域中吗?

  2. 如果是这样,存储在字符串文字池中的数据是否可以被视为全局数据?

  3. 从函数返回字符串文字总是安全的(因为它是全局的)?

c c-strings lifetime string-literals

0
推荐指数
1
解决办法
128
查看次数

为什么c_str()会打印两次字符串?

所以...当我去的时候:

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-strings

-1
推荐指数
1
解决办法
1692
查看次数

将 vector&lt;char&gt; 复制到 char*

我只是在学习 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)

c++ vector c-strings char

-1
推荐指数
1
解决办法
5143
查看次数

将malloc的char*传递给构造函数,在char*上使用printf会产生分段错误

我有一个主要功能,称之为:

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)

c++ string pointers c-strings char

-1
推荐指数
1
解决办法
58
查看次数

memset不使用指向字符的指针

以下代码有什么问题?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++ coredump pointers c-strings memset

-1
推荐指数
1
解决办法
419
查看次数

C标准库函数'strncpy'无法正常工作

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)

问题:当我运行此代码并输入一些字符串时,它不会打印出我输入的字符串数量

在此输入图像描述

c c-strings standard-library

-1
推荐指数
1
解决办法
179
查看次数

未来的 C++ 版本中是否会有 size_t strlen(const char8_t*)

char8_t在 C++20 中修复了 的一些问题char,因此我正在考虑使用char8_t而不是charutf8 文本(例如来自命令行的文本)。但后来我注意到strlen标准中没有指定要与 一起使用char8_t,实际上 cstring 库中没有指定函数。我可以期望在下一个标准更新中发生这种情况吗?或者从来没有打算按照我想要的方式char8_t替换?char

c++ c-strings strlen char8-t

-1
推荐指数
1
解决办法
661
查看次数

字符串操作是否因为一次访问一个字符而效率低下?

我听说

  • strlen()C 标准库中的字符串操作(例如)访问和操作字符串的字符,一次一个字符。
  • 计算机一次访问内存中的一个单词。
  • 一次访问一个字符效率低下,字符串操作的时间成本很高。

以上是真的吗?

有哪些解决方案可以提高字符串操作的时间性能?

c string performance c-strings

-1
推荐指数
1
解决办法
90
查看次数