为什么变量的值在程序中不改变就改变了



变量的值在输入";abcdefghijklmnop";,根据需要为16个字符。我不明白为什么它会自动变化。如果能得到任何帮助,我将不胜感激。

这是代码:

void test(void){
char    arr[16];
int     magic = 42;
printf("magic = %dn", magic);

printf("Enter a character string: ");

getString(arr, 16 + 1);
printf("The length of string [%s] is %dn", arr, stringLength(arr));

printf("magic = %dn", magic);
}
int main(int argc, char * argv[])
{
test();
printf("n");
return 0;
}

感谢

您告诉getString读取比arr所能容纳的更多的字符,并且这些额外的字符被存储到arr之外的内存中,从而覆盖magic

要存储N个字符长的字符串,您需要一个至少N+1个元素宽的数组。一个由16个元素组成的char数组可以存储长度不超过15个字符的字符串以及字符串终止符。与其让getString读16+1个字符,不如让它读16-1个字符。

事实上,你应该告诉它

getString(arr, sizeof arr - 1 );

也许这可以解决您的问题:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
#include <string.h>
#define MAX 20
void test(void){
char    arr[MAX];
int     magic = 42, stringLen = 0;
printf("magic = %dn", magic);

printf("Enter a character string: ");

fgets(arr, MAX, stdin);
stringLen = strlen(arr);
if(arr[stringLen -1] == 'n'){
arr[stringLen -1] = '';
stringLen = strlen(arr);
}
printf("The length of string [%s] is %d ", arr, stringLen);

printf("magic = %dn", magic);
}
int main()
{
test();
printf("n");
return 0;
}

最新更新