我需要在数组中定义字符并打印字符串...但它总是打印为string7(在这种情况下,test7)...我在这里做错了什么?
#include <stdio.h>
int main() {
char a[]={'t','e','s','t'};
printf("%s\n",a);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个String对象,它只包含一个char*字符串; 会员.我通过将成员从我的对象复制到参数的成员而重载operator +,两者都变成了char*变量.但由于某些原因,当我打印结果时,我得到了大约16个添加的giberish字符(转换过载是100%罚款).我把它缩小到char*sum = new char [length]就是问题了.我检查了strlen(sum),它显示等于22,当它应该是6个字母长.任何人都知道问题可能是什么?
String String::operator+(const String& rhs)
{
int length = strlen(string) + strlen(rhs.string);
char* sum = new char[length];
for(int i=0;i<strlen(string);i++)
sum[i] = string[i];
for(int i=0;i<strlen(rhs.string);i++)
sum[strlen(string) +i] = rhs.string[i];
String s(sum);
return s;
}
Run Code Online (Sandbox Code Playgroud)
编辑:现在胡言乱语已经消失了,但我仍然将=附加到我的结果中,例如:"1"+"2"+"3"现在是"1 = 2 = 3".这是null终止符解释错误的结果吗?
再次编辑:没关系,真的很懒,设置[length + 1] ='\ 0'而不是[length].再次感谢您的回答!
'l' strlcpy代表什么?我肯定在询问它会非常明显但我似乎无法在任何地方挖掘出坚实的答案.
以下代码来自K&R教科书,第71页:
val =10.0*val+s[i] -'0'
Run Code Online (Sandbox Code Playgroud)
s[i] -'0'这里的意思是什么?
所以我创建了自己的函数来比较两个C字符串:
bool list::compareString(const char array1[], const char array2[])
{
unsigned char count;
for (count = 0; array1[count] != '\0' && array2[count] != '\0' && (array1[count] == array2[count] || array1[count + 32] == array2[count] || array1[count] == array2[count+32]); count++);
if (array1[count] == '\0' && array2[count] == '\0')
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
我的for循环的参数非常长,因为它将计数带到至少一个字符串的末尾,并char以这样的方式比较每个数组中的每个字符串它们的情况无关紧要(将32添加到大写字母char转为char进入小写的对应部分).
现在,我猜这是比较两个C字符串的最有效方法,但由于它的长度,for循环难以阅读.我被告知的是尽可能使用for循环而不是while循环,因为for循环在其起始参数中具有起始,结束和递增条件,但为此,这似乎可能不适用.
我要问的是,我应该如何格式化这个循环,是否有更有效的方法呢?
我有一个Arduino从我的智能手机(通过蓝牙)接收包含unix时间戳的消息.现在,我正在尝试将DS1307与该时间戳同步.
但是,它没有用,因此,我开始搜索并在将包含时间戳的C风格数组转换为浮点数时发现了一些奇怪的行为.
// Copy the time into "timeBuff"
int timeLength = siz - _CAT_LENGTH_;
char timeBuff[timeLength+1];
memcpy(timeBuff, &msg[_CAT_LENGTH_], timeLength);
timeBuff[timeLength] = '\0';
// For debugging
Serial.print(F("timeBuff: "));
Serial.println(timeBuff);
// Convert timeBuff string into a variable of type long
float deviceTime = atof(timeBuff);
// Now, deviceTime != what we printed above
Serial.print(F("Epoch time: "));
Serial.println(deviceTime);
Run Code Online (Sandbox Code Playgroud)
前5行将消息的右侧部分复制到字符数组中,并添加终止零.
然后,我们打印内容timeBuff并将其转换float为存储的内容deviceTime.最后,我们打印deviceTime.
这是我第一次测试的结果
timeBuff: 1476113620
Epoch time: 1476113664.00
Run Code Online (Sandbox Code Playgroud)
这是第二次测试
timeBuff: 1476115510
Epoch time: 1476115456.00
Run Code Online (Sandbox Code Playgroud)
为什么结果atof与我们传递的字符串不同?
由于某些字符串末尾缺少char'\ 0',我的代码崩溃了.
我很清楚为什么我们必须使用这个终止字符.我的问题是,在字符数组中添加潜在的第二个空字符是否有问题 - 解决字符串问题?
我认为只需在每个字符串上添加一个"\ 0",而不是验证它是否需要然后添加就更便宜,但我不知道这是不是一件好事.
我在将字符串写入txt文件时遇到问题.我的线路每次都会被覆盖.我
gcc -Wall -o filename filename.c用来编译和./filename 10 Berlin cat resultat.txt执行.txt文件总是只有一行(最后一行)如何保存所有记录.
我有一个包含城市名称和一些居民的CSV文件,我需要过滤城市名称和最少的居民.
到目前为止我尝试了什么:
.....
void write_file(char *result[], int len) {
FILE *fp = fopen("resultat.txt", "w");
if (fp == NULL){
perror("resultat.txt");
exit(1);
}
for (int i=0; i<len; i++) {
fprintf(fp, "%s\n", result[i]);
}
fclose(fp);
}
int main(int argc,char **argv) {
int anzahl = atoi(argv[1]);
char *string_array[100];
char *erste_zeile;
erste_zeile = (char *) malloc(1000 * sizeof(char));
char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR];
char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR];
int bewohner[MAX_LAENGE_ARR];
int len = read_file("staedte.csv", staedte, laender, bewohner);
for …Run Code Online (Sandbox Code Playgroud) 是否可以使用strlen()动态分配的字符串?
例如:
#include <stdio.h>
#include <string.h>
int main ()
{
char *input=NULL;
printf ("Enter a sentence: ");
scanf("%ms", &input);
//Is this legit?
printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(input));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我无法在命令提示符下键入第二个输入,它说我的程序已停止。我只是尝试自己的代码。我添加了两个函数来检查字符串的长度和内容。而且我可以简单地使用strcmp(),但是我避免将其用于练习。
#include<stdio.h>
#include<string.h>
int lencompare(char *str1, char *str2){
int len1, len2;
len1 = strlen(str1);
len2 = strlen(str2);
return (len1==len2) ? 1 : 0;
}
int compare(char *str1, char *str2){
int i =0, flag=0;
if(lencompare(str1, str2)==1){
while(*(str1+i) != '\0');
{
if(*(str1+i) == *(str2+i))
flag = 1;
else
flag = 0;
i++;
}
return flag;
}
if(lencompare(str1, str2) == 0){
printf("Length is Different");
}
}
int main(){
char *str1 , *str2 ;
fgets(str1, 20, stdin);
fgets(str2, 20, stdin);
if(compare(str1, str2) == 1){ …Run Code Online (Sandbox Code Playgroud)