标签: c-strings

写入c-string

我的代码段错误,我不知道为什么.

 1  #include <stdio.h>
 2
 3  void overwrite(char str[], char x) {
 4    int i;
 5    for (i = 0; str[i] != '\0'; i++)
 6      str[i] = x;
 7  }
 8
 9  int main(void) {
10    char *s = "abcde";
11    char x = 'X';
12    overwrite(s, x);
13    printf("%s\n", s);
14    return 0;
15  }
Run Code Online (Sandbox Code Playgroud)

gdb调试器告诉我,问题出在第6行,我想将一个char存储到c-string中(如果我使用左值指针解除引用,那就是同样的问题.)这就是他所说的:

(gdb) run
Starting program: /tmp/x/x 

Breakpoint 1, overwrite (str=0x8048500 "abcde", x=88 'X') at x.c:5
5         for (i = 0; str[i] != '\0'; i++) …
Run Code Online (Sandbox Code Playgroud)

c kr-c c-strings cstring segmentation-fault

3
推荐指数
1
解决办法
1078
查看次数

如何将时间转换为c中的ac字符串?

我想在.c文件中写一些.txt文件,但需要用当前时间戳作为后缀来命名该文件,就像filename_2010_08_19_20_30一样.所以我必须首先定义文件名char数组并自己处理文件名?逐个分配字符?

有没有简单的方法呢?

c arrays c-strings

3
推荐指数
1
解决办法
2146
查看次数

在C中通过引用正确传递char数组和char指针

有没有一种正确的方法来调用一个char数组和一个char指针来转到一个函数,但它是通过引用传递的,它也将被操作?

像这样的东西:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void manipulateStrings(char *string1, char *string2[])
{

    strcpy (string1, "Apple");
    strcpy (string2, "Banana");

    printf ("2 string1: %s", string1);
    printf ("2 string2: %s", &string2);

}


int main ()
{
    char *stringA;
    char stringB[1024];

    stringA = (char *) malloc ( 1024 + 1 );

    strcpy (stringA, "Alpha");
    strcpy (stringB, "Bravo");
    printf ("1 stringA: %s", stringA);
    printf ("1 stringB: %s", stringB);

    manipulateStrings(stringA, stringB);

    printf ("3 stringA: %s", stringA);
    printf ("3 stringB: %s", stringB);


    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers c-strings

3
推荐指数
1
解决办法
6万
查看次数

将零终止字符串转换为D字符串

在Phobos中是否有一个函数用于将零终止字符串转换为D字符串?

到目前为止,我只发现了相反的情况toStringz.

我在下面的代码片段中需要这个

// Lookup user name from user id
passwd pw;
passwd* pw_ret;
immutable size_t bufsize = 16384;
char* buf = cast(char*)core.stdc.stdlib.malloc(bufsize);
getpwuid_r(stat.st_uid, &pw, buf, bufsize, &pw_ret);
if (pw_ret != null) {
    // TODO: The following loop maybe can be replace by some Phobos function?
    size_t n = 0;
    string name;
    while (pw.pw_name[n] != 0) {
        name ~= pw.pw_name[n];
        n++;
    }
    writeln(name);
}
core.stdc.stdlib.free(buf);
Run Code Online (Sandbox Code Playgroud)

我用它来查找用户ID的用户名.

我现在假设UTF-8兼容性.

d c-strings null-terminated string-conversion

3
推荐指数
1
解决办法
241
查看次数

你能用变量来指定字段宽度吗?

我想知道你是否可以使用变量来指定字段宽度,例如:

float g = 123.4567;
int x = 3;
int y = 4;
printf("%(%d).(%d)f", x,y,g);
Run Code Online (Sandbox Code Playgroud)

我希望我的输出为:"123.4567",基本相同

printf("%3.4f");
Run Code Online (Sandbox Code Playgroud)

我不认为编译器会读取当前格式,但也许还有另一种方法.

c string c-strings

3
推荐指数
1
解决办法
386
查看次数

Swift快速低级别字符串lastIndexOf

我需要尽可能快的lastIndexOf实现.我发现字符串高级功能非常慢.我尝试使用c函数strrchr,并尝试将字符串复制到NSData并使用指针,但我无法正确使用语法.我的字符串将始终有1个字节的字符和我正在搜索"|"的字符串 也总是1个字节.

任何使用advance的实现都会太慢,但这是我能找到的最快的例子:

func indexOf(target: String, startIndex: Int) -> Int
{
    var startRange = advance(self.startIndex, startIndex)

    var range = self.rangeOfString(target, options: NSStringCompareOptions.LiteralSearch, range: Range<String.Index>(start: startRange, end: self.endIndex))

    if let range = range {
        return distance(self.startIndex, range.startIndex)
    } else {
        return -1
    }
}

func lastIndexOf(target: String) -> Int
{

    var index = -1
    var stepIndex = self.indexOf(target)
    while stepIndex > -1
    {
        index = stepIndex
        if stepIndex + target.length < self.length
        {
            stepIndex = indexOf(target, startIndex: stepIndex + target.length)
        } …
Run Code Online (Sandbox Code Playgroud)

string c-strings swift

3
推荐指数
1
解决办法
2358
查看次数

C实现可以在引擎盖下使用长度为前缀的字符串吗?

在阅读了这个问题之后:长度为前缀的字符串克服的零终止字符串有什么问题?我开始想知道,究竟是什么阻止了C实现为堆栈或堆上分配的任何charwchar_t数组分配一些额外的字节,并使用它们作为"字符串前缀"来存储N其元素的数量?

然后,如果N-th字符是'\0',则N - 1表示字符串长度.

我相信这可以极大地提升诸如strlen或等功能的性能strcat.

如果程序广泛使用非0终结char数组,这可能会转向额外的内存消耗,但这可以通过编译器标志打开或关闭'\0'编译代码的常规"计数直到达到"例程来解决.

这种实施有哪些障碍?C标准是否允许这样做?这项技术会导致我没有考虑到哪些问题?

并且......实际上有没有这样做过?

c compiler-construction c-strings null-terminated compiler-optimization

3
推荐指数
1
解决办法
678
查看次数

如何比较C字符串和C ++字符串?

我想找出为什么比较功能没有给我正确的结果?

据我所知,如果两个字符串相同,则应该返回0!

bool validatePassword(char id[], string password) {

    // cannot be the same as the id string
    if(password.compare(id) == 0) {
        cout << "password can not be as same as id\n";
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

c++ string c-strings

3
推荐指数
2
解决办法
3320
查看次数

释放c字符串数组

这里我有一个动态分配的c字符串数组.

  • 释放这样一个数组的正确方法是什么?

  • 有必要单独释放每个元素A,如下面的代码?

谢谢.

#include <string.h>
int main()
{
    const char** A = new const char*[3];
    A[0] = (const char*)memcpy(new char[5], "str0", 5);
    A[1] = (const char*)memcpy(new char[5], "str1", 5);
    A[2] = (const char*)memcpy(new char[5], "str2", 5);

    // Is this the proper way to free everything?
    for (int i = 0; i < 3; ++i)
        delete[] A[i];
    delete[] A;
}
Run Code Online (Sandbox Code Playgroud)

c++ c-strings

3
推荐指数
1
解决办法
82
查看次数

将std :: u8string复制到utf8字符的c样式字符串中

将没有编码的字符串复制到C字符串中非常容易:

auto to_c_str(std::string const& str) -> char* {
    auto dest = new char[str.size() + 1];
    return strcpy(dest, str.c_str());
}
Run Code Online (Sandbox Code Playgroud)

但是,我该怎么做std::u8string呢?有没有STL算法可以帮助您呢?

我尝试了这个:

auto to_c_str(std::u8string const& str) -> char8_t* {
    auto dest = new char8_t[str.size() + 1];
    return std::strcpy(dest, str.c_str());
}
Run Code Online (Sandbox Code Playgroud)

但是,当然,std::strcpy对于utf8字符串而言不会过载。

c++ c-strings utf-8 c++20 char8-t

3
推荐指数
1
解决办法
134
查看次数