c-strings 相关问题

编程语言C中的字符串表示为字符序列,后跟空终止符(表示为\ 0)。

追加、C 字符串和结构成员函数

我不熟悉我大学的学术诚实规则,所以请不要解释我使用附加成员函数可能出现的问题,我只是想理解......

回答 1 投票 0

无法将字符串文字分配给 C 中的字符数组

我正在尝试将字符串文字分配给字符数组。 这段代码工作正常 #包括 结构学生 { 字符*名称; }; 结构学生 s[2]; 无效主() { s[0].na...

回答 1 投票 0

为什么添加 char 字符后不打印新字符串?

我打算用 C 语言编写一些 leetspeak 代码,但是,我不断收到如下错误: 错误:不兼容的整数到指针转换从结果类型为“string”的函数返回“char”(又名...

回答 3 投票 0

回答 1 投票 0

如何在 Rust 中处理指向 C 字符串数组的指针?

我正在尝试在 C++ 库上编写一个 Rust 包装器,其中指向 C 样式字符串数组的指针定义为: 字符 *** 名称; 在 C++ 中,我可以轻松地迭代字符串: for(int i=0;i 我正在尝试在 C++ 库上编写一个 Rust 包装器,其中指向 C 样式字符串数组的指针定义为: char ***name; 在 C++ 中,我可以轻松地迭代字符串: for(int i=0;i<n;++i) std::cout << std::string(*(name[i])) << std::endl; 给出正确的结果。 但是,在 Rust 中我不知道如何正确地做到这一点。 与 C++ 库的绑定由 bindgen 正确生成,并且 name 显示为 pub name: *mut *mut *mut ::std::os::raw::c_char 所以,我正在尝试以下方法: // Get a slice of pointers to strings of size n, n is known and is correct // The type of names is &[*mut i8] let names = unsafe{ std::slice::from_raw_parts(*(name), n) }; // Iterates over a slice. ptr: &*mut i8 for ptr in names.iter() { // Constructs a c-string from *mut i8 let cs = unsafe{ CStr::from_ptr(*ptr) }; // Shoud print a string, but gives rubbish instead println!("{:?}",cs); } 但是这会打印垃圾,所有输出行都相同且大小为 2,而字符串不同且长度不同: "\x90\"" "\x90\"" "\x90\"" "\x90\"" "\x90\"" "\x90\"" 我肯定遗漏了一些明显的东西,但找不到任何错误。如有任何帮助,我们将不胜感激! 您的 Rust 代码似乎是正确的。 这是对情况的模拟,内存布局与您的描述相符。 也许C端的实际布局并不完全是你描述的那样。 在我看来,第一级参考(指针)是不需要的,但我不知道您的用例的实际需要。 use std::ffi::{c_char, CStr}; fn prepare_name_vec() -> Vec<*const c_char> { ["one\0", "two\0", "three\0", "four\0"] // static nul-terminated strings .iter() .map(|s| s.as_ptr() as *const _) // u8 ptr to u8 ptr .collect() } fn read_names_from_c( names: *const *const *const c_char, n: usize, ) { /* names *names c_str char *** •~~> char ** •~~> [char * •~~> ['o', 'n', 'e', '\0'] ,char * •~~> ['t', 'w', 'o', '\0'] ,char * •~~> ['t', 'h', 'r', 'e', 'e', '\0'] char * ] •~~> ['f', 'o', 'o', 'r', '\0'] */ let name_slice = unsafe { std::slice::from_raw_parts(*names, n) }; for c_ptr in name_slice.iter() { let c_str = unsafe { CStr::from_ptr(*c_ptr) }; println!("{:?}", c_str); } } fn main() { let name_vec = prepare_name_vec(); let names: *const *const *const c_char = &name_vec.as_ptr() as *const _; let n = name_vec.len(); read_names_from_c(names, n); }

回答 1 投票 0

C 错误需要“char **”,但参数类型为“char (*)[10]”

我正在尝试实现我的 strcat 版本。但是,我收到以下警告,并且我的代码在运行时崩溃。我从 main 传递 &p 来对 main 函数中的变量 p 进行永久更改。

回答 3 投票 0

在编译时在文字的第一个条目处插入 #define 字符串文字的长度

我正在使用 ESP-ZigbeeSDK 编写一个 C 程序,其中我需要设置一个默认字符串,例如 #define mystring。但 ZigBee 要求文字的第一个字符表示字符串 #d 的长度...

回答 1 投票 0

C 中的字符串。Strcpy 的行为很奇怪

strcpy 函数工作得很奇怪,我想知道发生了什么。 char name[] = "蝙蝠侠"; //10个字符 字符名称2[5]; strcpy(name2, 名称); 由于某些原因,现在名称已更改...

回答 1 投票 0

在C语言中,在for循环的声明部分声明str[i]=' '来获取最后一个字符'i'的值是错误的吗?

我尝试编写代码来反转字符串,但不计算字符串的长度。 我输入后显示分段错误,请帮忙... #包括 国际麦...

回答 3 投票 0

为什么 strlen() 比手动循环检查空终止字符快大约 20 倍?

最初的问题反响不佳,并得到了很多反对票。所以我想我应该修改这个问题,使其更容易阅读,并希望对看到它的人有更多帮助。原来的

回答 2 投票 0

无法在 C 中使用函数指针进行字符串比较

compare_first_character 函数有两个版本,它们都被传递到另一个函数中。然而,第一个会产生正确的单词匹配,而第二个则不会返回...

回答 2 投票 0

C 初学者 - struct 中的字符串不需要 Malloc

为什么结构体中的字符串不需要调用Malloc? 你好,我这周刚开始学习 C,我发现了一个我无法解释的奇怪的不一致之处。 据我所知,当函数结束时,

回答 0 投票 0

仅选择字符串中的前几个字符 C++

我想使用 C++ 选择字符串的前 8 个字符。现在我创建一个 8 个字符长的临时字符串,并用另一个字符串的前 8 个字符填充它。 然而...

回答 6 投票 0

下标值既不是数组也不是指针也不是向量。在 C

问题指出,我从用户那里获取输入,使用 C 中的结构输入 n 个名称。我编写了以下代码: #include typedef结构员工{ 国际合作...

回答 2 投票 0

strtok() 没有返回预期值? [关闭]

char str[] = "int x,y; "; char* token = strtok(str, ","); while (token != NULL) { printf("%s ", 令牌); token = strtok(NULL, ","); } 在给定的...

回答 1 投票 0

打印字符串时缺少第一个字符

#包括 #包括 #包括 无效主要(无效) { 整数大小,i,j; printf("请输入员工编号 "); scanf("%d", &j); printf(...

回答 1 投票 0

在不使用任何预定义函数的情况下,在 C 中删除字符串中的多余空间

我想在不使用任何预定义函数的情况下删除 C 中字符串中的多余空格。 这是我的代码: 但仍然在 XYZ 之后打印一个额外的空间。 有没有更好的方法请分享 #包括...

回答 3 投票 0

C 编程模式打印以下模式

我曾尝试打印以下图案,但我只能从一侧减少字母,而不能从两侧减少 请有人帮我这个: 打印这个图案 这是...

回答 4 投票 0

Julia 中 Cstring 的自由函数

我在 Julia 中有一个函数可以创建一个合适的 Cstring。此Cstring 被放入由malloc 分配的内存中,因此在使用后,需要释放内存。我想要 Julia 中的一个函数

回答 0 投票 0

C 中的 Char 数组,如果用户在其中插入空格则无法打印整个数组

我有这个问题要解决,我基本上需要允许用户输入最多 80 个字符的文本。输入字符串后,程序将必须遍历每个字符和

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.