我的代码段错误,我不知道为什么.
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字符串的指针.如果我将第二个指针递增1,并将第二个指针的值赋给第一个指针的值,我希望第一个字符串的第一个字符可以改变.例如:
#include "stdio.h"
int main() {
char* original_str = "ABC"; // Get pointer to "ABC"
char* off_by_one = original_str; // Duplicate pointer to "ABC"
off_by_one++; // Increment duplicate by one: now "BC"
*original_str = *off_by_one; // Set 1st char of one to 1st char of other
printf("%s\n", original_str); // Prints "ABC" (why not "BBC"?)
*original_str = *(off_by_one + 1); // Set 1st char of one to 2nd char of other
printf("%s\n", original_str); // Prints "ABC" (why not "CBC"?)
return 0; …Run Code Online (Sandbox Code Playgroud) 可以的CString ::格式()接受常量的std :: string?
例:
void some_func( const std::string a_string )
{
CString b_string("World");
CString c_string;
c_string.Format("%s %s!", a_string, b_string);
/* print c_string */
};
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 6来调试C++应用程序.编译应用程序以支持unicode字符串.CString类型用于操作字符串.当我使用调试器时,监视窗口将显示字符串的第一个字符,但不会显示完整的字符串.我尝试使用XDebug,但此工具无法正确处理unicode字符串.作为一种解决方法,我可以通过索引到CString维护的私有数组来为字符串的每个字符创建一个自定义监视,但这非常繁琐.
如何在VC6调试器中查看CString的完整unicode值?
我在这里设置一个指针指向一个指针,另一个指向再次命名,但得到了lenth.我怎么用cout << strlen(tail);它一直告诉我lenth是3?即使我输入12的东西?
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
char name[0];
cout << "Please enter your name: ";
cin.getline(name, 256);
cout << "Your name: " << name << endl;
char* head = name;
cout << head[6] << endl;
char* tail = name;
cout << strlen(tail);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码我输出像(最后一个给出分段错误)
U
s
HelloThisisatest
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么.代码是
int main()
{
char *a[]={"Hello" "This" "is" "a" "test"};
printf("%c\n",a[1][0]);
printf("%c\n",a[0][8]);
printf("%s\n",a[0]);
printf("%s\n",a[3]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另一个问题是我们可以在不使用逗号的情况下初始化二维数组吗?当我用\ns 替换\ts然后输出变化时,我得到的另一种情况
"你的HelloThisisatest(null)"
为什么?
我有一些C++代码,我需要在sprintf中使用CString.在这段代码中,我创建的文件名是由sprintf定义的CStrings.代码如下.
double Number;
Number = 0.25;
char buffer [50];
CString sFile;
sFile = sprintf(buffer,"TRJFPICD(%3.3f).txt",Number);
CString SFFile;
SFFile = sprintf(buffer,"TRJFPICV(%3.3f).txt",Number);
CString SFFFile;
SFFFile = sprintf(buffer,"TRJFPICA(%3.3f).txt",Number);
Run Code Online (Sandbox Code Playgroud)
所需的文件名是TRJFPICD(0.25).txt, TRJFPICV(0.25).txt,和TRJFPICA(0.25).txt.我必须使用CStrings代码.
我得到的错误是' operator ='含糊不清.
我公司使用这样的代码:
std::string(CT2CA(some_CString)).c_str()
Run Code Online (Sandbox Code Playgroud)
我认为它将Unicode字符串(其类型为CString)转换为ANSI编码,此字符串用于电子邮件的主题.但是,电子邮件的标题(包括主题)表示邮件客户端应将其解码为unicode(这是原始代码的作用).因此,一些像"äöü"这样的德国字母将无法正确显示为标题.
无论如何,我可以将此标头放回UTF8并存储到std :: string或const char*?
我知道有很多更聪明的方法可以做到这一点,但我需要保持代码坚持原来的(即将头部发送为std :: string或const char*).
提前致谢.
我有一个库,它有这样的功能:
int get_user_name(const char **buffer);
Run Code Online (Sandbox Code Playgroud)
在swift中,应该像这样调用:
var name:CMutablePointer<CString> = nil
get_user_name(name)
Run Code Online (Sandbox Code Playgroud)
我想让这个功能更舒服,所以我把它包起来:
func get_username() -> String {
var name:CMutablePointer<CString> = nil
get_user_name(name)
// how to convert name to String
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将名称转换为String
我收到一个奇怪的错误告诉我,当我只是尝试将CStringArray传递给我编写的函数以将其分解为碎片时,我无法访问在类'CObject'中声明的私有成员.我已经注释掉了我的整个函数代码,所以我知道问题存在于对象本身的传递中,我假设我做错了.
这是我的代码:
// If successful, read file into CStringArray
CString strLine;
CStringArray lines;
while (theFile.ReadString(strLine))
{
lines.Add(strLine);
}
// Close the file, don't need it anymore
theFile.Close();
// Break up the string array and separate it into data
CStringArrayHandler(lines);
Run Code Online (Sandbox Code Playgroud)
这是我的CStringArrayHandler函数:
void CSDI1View::CStringArrayHandler(CStringArray arr)
{
// Left out code here since it is not the cause of the problem
}
Run Code Online (Sandbox Code Playgroud)
这是我的头文件中的函数声明:
class CSDI1View : public CView
{
// Operations
public:
void CStringArrayHandler(CStringArray arr); // <<<<===================
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误的全文:
错误1错误C2248:'CObject :: CObject':无法访问在类中声明的私有成员>'CObject'c:\ program files(x86)\ …